2012-03-14 162 views
1

我寫這個問題的原因是,當我試圖通過WCF服務與Windows服務和WPF應用程序之間進行通信時,我似乎遇到以下錯誤:一個NetNamedPipe結合:使用WCF NetNamedPipe與客戶端進行通信的Windows服務

System.ServiceModel.EndpointNotFoundException:沒有終點 在net.pipe聽://本地主機/ Pipe_SendInfo


現在血淋淋的細節。

好吧,我有一個定期執行代碼的Windows服務,我想讓用戶知道服務內部發生了什麼。所以我讀到,我可以通過NetNamedPipe WCF服務完成此操作。我創建了兩個測試應用程序,併成功地將消息從一個進程發送到另一個進程。然後我試圖發送從Windows服務消息發送到客戶端應用程序(在同一臺機器上),並至今慘敗:(

我的Windows服務本質上是做這個(要發送的信息):

ChannelFactory<SkipSyncLib.ISendInfo> pipeFactory = 
    new ChannelFactory<SkipSyncLib.ISendInfo>(
     new NetNamedPipeBinding(), 
     new EndpointAddress("net.pipe://localhost/Pipe_SendInfo")); 

pipeFactory.CreateChannel(); 
pipeFactory.SendInfo(info); 

和應該接受信息的應用程序做到這一點,當它啓動時:

public void Start() 
{ 
    HostService = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost") }); 
    HostService.AddServiceEndpoint(typeof(ISendInfo), new NetNamedPipeBinding(), "Pipe_SendInfo"); 

    try 
    { 
     HostService.Open(); 
    } 
    catch (Exception exc) 
    { 
     //Error handling 
    } 
} 

起腳的是,而Windows服務失敗草草收場找到端點我還有一個控制檯應用程序,它能夠發送信息到正在運行的客戶端應用程序成功。所以邏輯會告訴我,這可能與用戶有關。但我無法弄清楚。

任何想法?我應該放棄命名管道並使用http綁定?

我剛剛在今天早些時候發現了有關命名管道,所以如果答案很明顯,請保持溫柔。

感謝

+0

你在運行什麼操作系統?如果Windows Vista或更高,請看看這裏:http://stackoverflow.com/questions/7477813/getting-endpointnotfoundexception-with-netnamedpipebinding-in-c-need-to-create。 – 2012-03-14 04:13:38

+0

服務器2008年。我找到了一種方法使其工作。客戶端應用程序和Windows服務需要作爲同一用戶運行,以便命名管道可用。 – Jose 2012-03-14 15:01:22

回答

0

我想通了,爲它工作的方式。有可能是一個更優雅的方式來做到這一點,但如果Windows服務和客戶端應用程序作爲相同的用戶運行,那麼通信渠道的作品。

相關問題