我希望从托管它的同一个 .exe 中连接到 WCF 服务。我将服务托管在 WPF 应用程序中:
ServiceHost svc = new ServiceHost(typeof("Namespace.Service"));
svc.Open();
和配置文件
<service name="Namespace.Service" >
<endpoint address="Contract/tcp"
binding="netTcpBinding"
contract="Namespace.IContract"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9002"/>
</baseAddresses>
</host>
</service>
这允许我启动一个单独的 VS 实例,创建一个控制台应用程序并成功执行以下操作:
IChannelFactory<IContract> facContract = new ChannelFactory<IContract>(new NetTcpBinding());
IContract contract = facContract.CreateChannel(new EndpointAddress("net.tcp://localhost:9002/Contract/tcp"));
string x = contract.GetProperty; //returns value I would expect
但是,如果我将原始 WPF ServiceHost 代码修改为以下内容,则会在我访问服务时引发超时异常(注意:如果我在控制台应用服务主机中执行相同操作,我不会得到超时...) :
ServiceHost svc = new ServiceHost(typeof("Namespace.Service"));
svc.Open();
IChannelFactory<IContract> facContract = new ChannelFactory<IContract>(new NetTcpBinding());
IContract contract = facContract.CreateChannel(new EndpointAddress("net.tcp://localhost:9002/Contract/tcp"));
string x = contract.GetProperty; //<-!!WCF Timeout exception thrown..
WCF 跟踪不提供附加详细信息(只是确认引发了超时异常)。有什么想法吗?{这不是关于 WCF 异常管理最佳实践的问题;我正在寻找从服务主机中访问服务并被这个奇怪的超时异常阻止}
编辑:当服务主机是 WPF 应用程序(可能是其他应用程序)时,会发生此超时;但是作为服务主机的控制台应用程序的行为与我预期的一样(例如,可以访问自托管服务)。我已经更新了标题和标签以反映这个新信息......
在此先感谢,