使用WCF NetNamedPipe与客户端进行通信的Windows服务
问题描述:
我写这个问题的原因是,当我试图通过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绑定?
我刚刚在今天早些时候发现了有关命名管道,所以如果答案很明显,请保持温柔。
感谢
答
我想通了,为它工作的方式。有可能是一个更优雅的方式来做到这一点,但如果Windows服务和客户端应用程序作为相同的用户运行,那么通信渠道的作品。
你在运行什么操作系统?如果Windows Vista或更高,请看看这里:http://*.com/questions/7477813/getting-endpointnotfoundexception-with-netnamedpipebinding-in-c-need-to-create。 – 2012-03-14 04:13:38
服务器2008年。我找到了一种方法使其工作。客户端应用程序和Windows服务需要作为同一用户运行,以便命名管道可用。 – Jose 2012-03-14 15:01:22