2014-09-25 76 views
1

我使用WCF在Windows服務(客戶端)和Winforms應用程序(服務主機)之間來回發送消息。直到最近這個工作。現在,當客戶端嘗試通信時,我收到以下錯誤消息:WCF錯誤 - 沒有端點偵聽

「沒有端點偵聽到http://localhost:8000/ColumbineWCFService可以接受該消息,這通常是由不正確的地址或SOAP操作引起的。

我已經花了整整一天的時間在這個論壇上提到類似的問題,但一直沒能解決,希望如果我從我的項目提供的具體細節答案會跳出來的人。

下面的代碼片斷(客戶端)發生錯誤:

var pingHost = new ColumbineWCFServiceReference.ColumbineWCFServiceClient(); 
pingHost.Open(); 
if (pingHost.AreYouThere() == true) return true; //<-- this is the line where the "no endpoint listening" error occurs 

客戶端側的app.config:

ServiceHost selfHost = null; 
Uri baseAddress = new Uri("http://localhost:8000/ColumbineWCFService"); 
selfHost = new ServiceHost(typeof(ColumbineWCFService), baseAddress); 
selfHost.AddServiceEndpoint(typeof(IColumbineWCFService), new WSHttpBinding(), "ColumbineWCFService"); 

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 
selfHost.Description.Behaviors.Add(smb); 
selfHost.Open(); 
:在主機側

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_IColumbineWCFService" /> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:8000/ColumbineWCFService/ColumbineWCFService" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IColumbineWCFService" 
      contract="IColumbineWCFService" name="WSHttpBinding_IColumbineWCFService"> 
     <identity> 
      <userPrincipalName value="Nathan-PC\Nathan" /> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 

C#代碼

請注意,所有的代碼編譯和服務都會按照「您已經創建了服務」頁面證明的那樣運行n基地址被輸入到網頁瀏覽器中。我忽略了什麼?

+0

您可以共享整個columbineWCFServiceClient代碼,而不僅僅是那麼小的一部分嗎?我認爲AreYouThere()方法定義有問題。另外,您是否嘗試過使用WCF測試客戶端來聯繫該方法? Visual Studio有一個客戶端可以用來聯繫它。 – Nzall 2014-09-25 21:28:33

+0

不知道是否可以解釋它,但客戶端的app.config中的「http:// localhost:8000/ColumbineWCFService/ColumbineWCFService」與主機中的「http:// localhost:8000/ColumbineWCFService」之間似乎有差異。 – 2014-09-25 21:53:25

回答

0

在客戶端的端點配置您的app.config:

  1. 它看起來像你的端點地址沒有指定託管端點代碼.svc文件。假設你的.svc文件名ColumbineWCFService.svc您的地址值將

    http://localhost:8000/ColumbineWCFService/ColumbineWCFService.svc

  2. 你的合同沒有具體的命名空間。假設你的命名空間是「ColumbineWCFService」你的合同將是「ColumbineWCFService.IColumnbineWCFService」

  3. 有一個名爲「WSHttpBinding_IColumbineWCFService」,儘管該參數不應該在端點無論是聽還是不差沒有綁定配置。

這就是說,爭取你的app.config如下:

<endpoint address="http://localhost:8000/ColumbineWCFService/ColumbineWCFService.svc" 
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IColumbineWCFService" 
contract="ColumbineWCFService.IColumbineWCFService" name="WSHttpBinding_IColumbineWCFService"> 

如果還是不行,再來讓我們知道,如果你有一個web.config的WCF服務和發表它。