Windows服务使用WCF NetNamedPipe与客户端进行通信

时间:2012-03-14 03:24:53

标签: wcf windows-services named-pipes

我写这个问题的原因是,当我尝试通过带有NetNamedPipe绑定的WCF服务在Windows服务和WPF应用程序之间进行通信时,我似乎遇到了以下错误:

  

System.ServiceModel.EndpointNotFoundException:没有端点   在net.pipe:// localhost / 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绑定吗?

我刚刚在今天早些时候发现了有关命名的管道,所以如果答案很明显,请保持温和。

由于

3 个答案:

答案 0 :(得分:0)

我找到了一种工作方式。这可能是一种更优雅的方式,但如果Windows服务和客户端应用程序作为同一用户运行,则通信通道可以正常工作。

答案 1 :(得分:0)

我认为也许HostService = new ServiceHost(this,new Uri [] {new Uri(“ net.pipe:// localhost”)});应该与客户端EndpointAddress相同。

答案 2 :(得分:0)

您应该使用相同的端点地址吗?

HostService = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost/Pipe_SendInfo") });

在Uri中添加 / Pipe_SendInfo