我正在编写一个带有“状态工具”的 Windows 服务。该服务托管用于进程间通信的 WCF 命名管道端点。通过命名管道,状态工具可以定期向服务查询最新的“状态”。
在我的开发机器上,我有多个 IP 地址;其中之一是具有 192.168.1.XX 地址的“本地”网络。另一个是“公司”网络,地址为 10.0.X.XX。Windows 服务在单个 IP 地址上收集 UDP 多播流量。
到目前为止,只要 Windows 服务使用“192.168.1.XX”地址,它就可以正常工作。它始终如一地向客户端正确报告状态。
一旦我切换到另一个“公司”IP 地址(10.0.X.XX)并重新启动服务,在检索状态时我会收到连续的“CommunicationExceptions”:
"There was an error reading from the pipe: The pipe has been ended. (109, 0x6d)."
现在,我不认为 UDP 客户端的“声明”IP 地址应该与 Named-Pipe 接口的功能有任何关系;它们是应用程序的完全独立部分!
以下是相关的 WCF 配置部分:
//On the Client app:
string myNamedPipe = "net.pipe://127.0.0.1/MyNamedPipe";
ChannelFactory<IMyService> proxyFactory =
new ChannelFactory<IMyService>(
new NetNamedPipeBinding(),
new EndpointAddress(myNamedPipe));
//On the Windows Service:
string myNamedPipe = "net.pipe://127.0.0.1/MyNamedPipe";
myService = new MyService(myCustomArgs);
serviceContractHost = new ServiceHost(myService );
serviceContractHost.AddServiceEndpoint(
typeof(IMyService),
new NetNamedPipeBinding(),
myNamedPipe);
serviceContractHost.Open();
我不认为这是一个“权限”问题-我正在以管理权限运行客户端-但也许有一些特定于域的原因这会破坏?