Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用WCF NetNamedPipe与客户端通信的Windows服务_Wcf_Windows Services_Named Pipes - Fatal编程技术网

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

使用WCF NetNamedPipe与客户端通信的Windows服务,wcf,windows-services,named-pipes,Wcf,Windows Services,Named Pipes,我写这个问题的原因是,当我试图通过带有NetNamedPipe绑定的WCF服务在windows服务和WPF应用程序之间进行通信时,我似乎遇到了以下错误: System.ServiceModel.EndpointNotFoundException:没有终结点 在网上收听。pipe://localhost/Pipe_SendInfo 现在是血淋淋的细节 好的,我有一个定期执行代码的windows服务,我想让用户知道服务中发生了什么。所以我读到我可以通过NetNamedPipe WCF服务来实现这一

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

System.ServiceModel.EndpointNotFoundException:没有终结点 在网上收听。pipe://localhost/Pipe_SendInfo


现在是血淋淋的细节

好的,我有一个定期执行代码的windows服务,我想让用户知道服务中发生了什么。所以我读到我可以通过NetNamedPipe WCF服务来实现这一点。我创建了两个测试应用程序,并成功地将消息从一个进程发送到另一个进程。然后,我尝试从windows服务向客户端应用程序(在同一台机器上)发送消息,但迄今为止失败惨重:(

我的windows服务基本上是这样做的(尝试发送信息):

更重要的是,虽然windows服务很难找到端点,但我有另一个控制台应用程序能够成功地将信息发送到正在运行的客户端应用程序。因此,逻辑告诉我,这可能与用户有关。但我无法理解

有什么想法吗?我应该放弃命名管道并使用http绑定吗

今天早些时候我刚刚发现了命名管道,所以如果答案显而易见,请保持温和


谢谢,我想出了一个方法让它工作。也许有一个更优雅的方法可以做到这一点,但是如果windows服务和客户端应用程序作为同一个用户运行,那么通信通道就会工作。

你应该使用同一个端点地址吗

HostService=newservicehost(这个,新的Uri[]){newuri(“net。pipe://localhost/Pipe_SendInfo);


在Uri中添加/Pipe\u SendInfo

您正在运行什么操作系统?如果是Windows Vista或更高版本,请查看此处:.Server 2008。我找到了一种方法使其工作。客户端应用程序和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
    }
}