我编写了一个C#控制台应用程序,以使用NetNamedPipeBinding使用本地WCF服务。我消耗的WCF服务正在作为本地Windows应用程序运行。我的WCF客户端可以很好地用作控制台应用程序。但是,当我实现的基本相同的WCF客户端不是作为控制台应用程序而是作为Windows服务实现时,我的WCF客户端无法找到本地WCF端点,并引发System.ServiceModel.EndpointNotFoundException异常。
为什么WCF客户端可以作为控制台应用程序正常运行,而当客户端作为Windows服务运行时又抛出EndpointNotFoundException?
这是我在客户端代码中创建通道工厂的方式:
// Define some local variables needed to create the channel factory
string strendpoint = string.Format("net.pipe://localhost/{0}", BluehillAPIService.ServiceName);
EndpointAddress endpoint = new EndpointAddress(strendpoint);
NetNamedPipeBinding binding = new NetNamedPipeBinding();
InstanceContext instanceContact = new InstanceContext(this);
// Create the channel factory
ChannelFactory = new DuplexChannelFactory<IBluehillAPIService>(instanceContact, binding, endpoint);
然后我创建这样的频道:
_bluehillAPIService = ChannelFactory.CreateChannel();
到目前为止,没有错误,但是当我尝试实际使用如下通道时,出现异常:
if (!_bluehillAPIService.APIHeartbeat()) ...
当此代码作为以本地系统身份登录的Windows服务运行时,在我的WCF客户端中对_bluehillAPIService.APIHeartbeat()的调用会生成System.ServiceModel.EndpointNotFoundException,但在本质上相同的代码作为控制台应用程序运行时可以正常工作。