提问人:user1389890 提问时间:7/28/2018 最后编辑:user1389890 更新时间:7/29/2018 访问量:323
WCF 客户端作为控制台应用程序工作,但作为 Windows 服务运行,失败并出现 EndpointNotFoundException
WCF client works as console application but running as Windows service, fails with EndpointNotFoundException
问:
我编写了一个 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,但当基本相同的代码作为控制台应用程序运行时,此代码可以正常工作。
答:
评论