2012-04-30 157 views
2

我試圖將以前在任務欄中的.asmx服務中運行的WCF服務封裝到控制檯應用程序中。在ServiceHost(控制檯應用程序)中運行的WCF服務

這裏是結束了WCF服務的代碼:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Uri uri = new Uri("http://localhost:5000"); 

     using (ServiceHost host = new ServiceHost(typeof(CheckoutService), uri)) 
     { 
       Console.WriteLine("Prepping CheckoutService server"); 
       ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
       smb.HttpGetEnabled = true; 
       smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
       host.Description.Behaviors.Add(smb); 

       host.Open(); 

       Console.Clear(); 
       Console.WriteLine("CheckoutService server up and running"); 
       Console.WriteLine("Press Return to stop service at any point"); 
       Console.ReadLine(); 
       host.Close(); 
     } 
    } 

然而,應該接收該服務(其使用的服務被包裹成一個控制檯應用程序之前上班)客戶端應用程序正在崩潰出與錯誤:

There was no endpoint listening at http://localhost:5000/CheckoutService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

此客戶端的app.config端點配置爲:

<endpoint 
    address="http://localhost:5000/CheckoutService.svc" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICheckoutService" 
    contract="CheckoutServiceServer.ICheckoutService" name="BasicHttpBinding_ICheckoutService" /> 

我想也許我在託管WCF服務的控制檯項目中缺少某種形式的.config文件,但我可能是錯的!

+0

討厭上尉明顯,但聽起來好像服務沒有運行。 – JayC

+2

你打開主機,清除控制檯,然後你馬上再次關閉主機......如果你馬上再次關閉主機,服務應該如何啓動和運行? –

+0

是的,我錯過了Console.ReadLine(),它是爲了保持它打開,但添加後,我仍然得到同樣的問題。 – Moza

回答

3

看起來您正在關閉主機而無需等待用戶輸入。你錯過了Console.ReadLine()

+0

+1我敢打賭,這一切都是錯的:-) –

+0

我已經添加了現在線很好發現,但我得到同樣的問題 – Moza

0

您尚未爲您的ServiceHost實例配置端點。您引用的配置文件未被使用,但基於此文件,您需要配置您的ServiceHost實例以使用BasicHttpBinding綁定和您的CheckoutServiceServer.ICheckoutService合同通過ServiceHost.AddServiceEndpoint()方法配置您的服務端點。

請參閱this文章以獲取託管WCF服務的幫助。

相關問題