2012-03-14 129 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服务和客户端应用程序作为相同的用户运行,那么通信渠道的作品。

相关问题