找不到WCF命名管道终结点

本文关键字:结点 管道 WCF 找不到 | 更新日期: 2023-09-27 18:28:52

简单地说,我们需要通过WCF命名管道进行outproc通信。在开发工具中,客户端和服务组件都是通过IOC在同一可执行文件中实例化的。

服务主机:

/// <summary>
/// Default constructor
/// </summary>
public OpaRuntimeServiceHost(string serviceName, string hostAddress)
{
    _serviceHost = new ServiceHost(typeof(OpaRuntimeService), new Uri[] {
        new Uri(string.Format("net.pipe://{0}/opa/{1}", hostAddress, serviceName))
    });
    _serviceHost.AddServiceEndpoint(typeof(IOpaRuntimeService), new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), serviceName);
    _serviceHost.Open();
}

客户:

/// <summary>
/// Default constructor
/// </summary>
/// <param name="hostAddress"></param>
/// <param name="serviceName"></param>
public OpaRuntimeServiceClient(string serviceName, string hostAddress)
    : base(new ServiceEndpoint(ContractDescription.GetContract(typeof(IOpaRuntimeService)),
    new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), new EndpointAddress(string.Format("net.pipe://{0}/opa/{1}", hostAddress, serviceName))))
{
}

这两个都是成功构建的,但当客户端调用服务时,它会生成以下错误:

并没有端点在网络上侦听。pipe://localhost/opa/runtime可以接受这个消息的。这通常是由不正确的地址或SOAP操作引起的。有关更多详细信息,请参见InnerException(如果存在)。

不幸的是,内部没有例外。根据其他问题,我确保Net.Pipe侦听器服务正在运行。Visual Studio正在使用提升的特权运行。

环境是Windows 10上的VS2015或Windows 7上的VS2012。

我遗漏了什么吗?

找不到WCF命名管道终结点

我认为对AddServiceEndpoint的调用需要端点的地址(根据MSDN文档)。在您的示例代码中,看起来您只是在传递serviceName。

我发现了一些正在做类似事情的示例代码。然而,在我的示例中,我从ServiceHost:派生

public class CustomServiceHost : ServiceHost
{
    public CustomServiceHost() : base(
        new CustomService(),
        new[] { new Uri(string.Format("net.pipe://localhost/{0}", typeof(ICustomService).FullName)) })
    {
    }
    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();
        foreach (var baseAddress in BaseAddresses)
        {
            AddServiceEndpoint(typeof(ICustomService), new NetNamedPipeBinding(), baseAddress);
        }
    }
}

弄明白了。服务名称在服务主机设置中使用了两次,因此创建了类似于net的名称。pipe://localhost/opa/runtime/runtime当它应该包含以下内容时:net。pipe://localhost/opa/runtime.谢谢你的橡皮鸭子。