2012-10-26 64 views
6

我新的WCF編程,我也跟着系列入門教程從下面的鏈接WCF與Visual Studio 2012

http://msdn.microsoft.com/en-us/library/ms734712.aspx

我在控制檯應用程序託管服務,但是當我試圖創建一個客戶端和試圖添加服務參考我有以下例外。託管應用

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Step 1 Create a URI to serve as the base address. 
     Uri baseAddress = 
      new Uri("http://localhost:8000/GettingStarted/"); 

     // Step 2 Create a ServiceHost instance 
     ServiceHost selfHost = 
      new ServiceHost(typeof(CalculatorService), baseAddress); 

     try 
     { 
      // Step 3 Add a service endpoint. 
      selfHost.AddServiceEndpoint(typeof(ICalculator), 
       new WSHttpBinding(), 
       "CalculatorService"); 

      // Step 4 Enable metadata exchange. 
      var smb = new ServiceMetadataBehavior(); 
      smb.HttpGetEnabled = true; 
      selfHost.Description.Behaviors.Add(smb); 

      // Step 5 Start the service. 
      selfHost.Open(); 
      Console.WriteLine("The service is ready."); 
      Console.WriteLine("Press <ENTER> to terminate."); 
      Console.WriteLine(); 
      Console.ReadLine(); 

      // Close the ServiceHostBase to shutdown. 
      selfHost.Close(); 
     } 
     catch (CommunicationException ce) 
     { 
      Console.WriteLine("exception: {0}", ce.Message); 
      selfHost.Abort(); 
     } 
    } 
} 

There was an error downloading 'http: localhost:8000/GettingStarted/mex/_vti_bin/ListData.svc/$metadata'. The request failed with HTTP status 405: Method Not Allowed. Metadata contains a reference that cannot be resolved: 'http: localhost:8000/GettingStarted/mex'. There was no endpoint listening at http: localhost:8000/GettingStarted/mex that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. The remote server returned an error: (404) Not Found. If the service is defined in the current solution, try building the solution and adding the service reference again.

代碼現在我無法弄清楚的問題是什麼。我正在使用visual studio 2012和.net平臺4.5。

+0

首先您是否能夠成功託管一項服務?你能分享你的控制檯應用程序的輸出嗎? – Praburaj

回答

8

我有一個類似的問題還有,這個搞亂。是的,你似乎已經正確地遵循了教程,但是如果你想連接它並作爲一個服務使用(就像做一個服務引用一樣),你還必須添加MEX服務enpoint。加入這一行你selfhost.Description.Behaviors.Add(SMB)後:

selfhost.AddServiceEndpoint(
      typeof(IMetadataExchange), 
      MetadataExchangeBindings.CreateMexHttpBinding(), 
      "http://localhost:8000/GettingStarted/mex"); 

這應該允許您通過「添加服務引用」進行連接。另外,我發現取決於你的系統,你可能需要以管理員身份運行VS以允許連接到網絡(以防過去不小心告知它)。

+0

我有同樣的錯誤,我怎樣才能通過app.config而不是代碼來配置它? – 2014-07-02 18:57:57

+0

我有同樣的問題。 Ijust檢查了服務的配置,並且我有這一行這是MEX服務端點嗎? –

+0

SoapUI在沒有任何問題的情況下可以發現服務,爲什麼會這樣?只有當我嘗試使用VS2015的這個(VS2015項目)服務時,我遇到了這個問題。但是SoapUI可以發現沒有任何問題。 –

0

從錯誤消息判斷,似乎沒有監聽指定端口的服務。當您嘗試添加服務引用時,您需要擁有運行該服務的控制檯應用程序。

+0

嗨Thanx回覆,控制檯應用程序正在運行,但仍然相同的錯誤 –

+0

也請確保HttpGetEnabled在您的服務中打開。否則您的客戶將無法獲得服務合同。 –

0

顯然,該服務沒有運行,這意味着沒有端點偵聽您用於創建服務引用的URL。

您可以在IIS中託管該服務,或保持控制檯應用程序以上述Damir的形式運行。

0

確保您的服務器在您嘗試訪問它時運行。還要檢查服務器上的配置,並確保客戶端的端點與服務器的端點匹配。確保你在使用相同的綁定。 確保服務器正在偵聽並且服務器的防火牆未阻止您。 如果您對WCF服務進行了更改,請不要忘記重新生成客戶端應用程序的服務引用。

+0

嗨控制檯應用程序正在運行,當我試圖添加服務參考 –

0

您確定您已經定義了一個MEX端點嗎?這是提供有關您的服務的元數據信息,以便工作室可以生成客戶端代理。

在您鏈接到的教程,這是this bit

// Step 4 Enable metadata exchange. 
ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 
selfHost.Description.Behaviors.Add(smb); 
+0

是啊它是在那裏在託管應用程序,因爲你可以看到我編輯了這個問題,它包括託管應用程序的代碼,我應該也發佈app.config? –

0

如果你正在主持在IIS的Web服務,爲您在web.config中(下行爲部分)

httpsGetEnabled設置爲True

0

我今天遇到了類似的問題。但是,對於我來說,我並不需要明確添加端點,就像@iMortalitySX已經說過的那樣。

我有一個不同的原因:我綁定到http://0.0.0.0,認爲聽IP不重要。事實上,通過SoapUI我能夠連接和使用服務。但是,當試圖在另一個Visual Studio項目中發現服務時,發現將失敗,因爲VS會得到初始響應,但隨後會跟進包含http://0.0.0.0的鏈接,然後失敗。

因此,將http://0.0.0.0更改爲我的機器的正確IP修復了我的問題。

-1

請嘗試把uri地址放入您的瀏覽器。在我的情況下,我能夠看到一個ExceptionDetail。