2012-02-05 57 views
1

我已經實現了一個簡單的聊天控制檯應用程序,它運行良好。當我試圖在GUI應用程序上應用相同的概念時。服務端託管時,有任何錯誤,但如果我使用CMD命令netstat -ao顯示所有端口,它不存在。因此,當我運行客戶端應用程序,有一個例外(無法連接,因爲目標機器積極拒絕)。我如何解決這些問題?WCF服務不在機器上

服務器

ServiceHost host; 
using (host = new ServiceHost(typeof(Service), new Uri("net.tcp://localhost:4111"))) 
{ 
    host.AddServiceEndpoint(typeof(IService), new NetTcpBinding(), "IService"); 

    try 
    { 
     host.Open(); 

    } 
    catch 
    { 
    } 
} 

客戶

public bool Connect() 
{ 
    DuplexChannelFactory<IService> pipeFactory = new DuplexChannelFactory<IService>(new InstanceContext(this), 
                        new NetTcpBinding(), 
                        new EndpointAddress(AppConfiguration.GetValue(net.tcp://localhost:4111/IService")); 

    try 
    { 
     pipeProxy = pipeFactory.CreateChannel(); 
     if (pipeProxy.Register()) 
     { 
      return true; 
     } 
    } 
    catch 
    { 
    } 
    return false; 
} 
+1

您是否試圖從與服務器相同的計算機運行客戶端?如果沒有,'net.tcp:// localhost:4111'會出現問題。 – 2012-02-05 01:08:28

回答

0

我已經解決了。 在GUI中刪除(使用)定義的新ServiceHost。爲什麼我不知道,但它的作品!

ServiceHost host; 
host = new ServiceHost(typeof(Service), new Uri("net.tcp://localhost:4111")); 
+0

不要這樣做! 「使用」是控制資源處置的句法糖。這個'工作'的原因是因爲你已經刪除了處理完ServiceHost的代碼。從你的問題中不清楚問題是什麼,但是你應該確定恢復'使用'塊。它的存在是有原因的。 – 2012-02-08 14:03:25

0

假設你是顯示所有的代碼。你需要在host.Open()之後添加一行,你可以添加Console.ReadLine()。

這會讓程序停止存在。現在發生的事情是主機打開,然後程序存在,主機被關閉/垃圾收集。