我的解决方案包含两个项目:WCF服务和WCF客户端。启动顺序:
当我手动启动我的服务时,以后我的客户端工作正常。但是如果我在调试模式下通过IDE做同样的事情,那么我得到例外的时间:
未处理的类型异常
System.ServiceModel.EndpointNotFoundException
发生在mscorlib.dll
其他信息:聆听
net.pipe://localhost/
并非如此 由任何可以接受该消息的结束点执行。除其他外 导致它可能是由SOAP的错误地址或操作引起的。对于 有关详细信息,请参阅InnerException的说明( if if 可用)。
但我客户的Config
- 文件包含超时设置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<system.serviceModel>
<bindings>
<netNamedPipeBinding>
<binding
closeTimeout="00:30:30"
openTimeout="00:30:30"
receiveTimeout="00:30:30"
sendTimeout="00:30:30"/>
</netNamedPipeBinding>
</bindings>
<client>
<endpoint name="pipe1"
address="net.pipe://localhost"
binding="netNamedPipeBinding"
contract="ServiceReference1.IContent"/>
<endpoint name="pipe2"
address="net.pipe://localhost"
binding="netNamedPipeBinding"
contract="ServiceReference1.IMessages"/>
</client>
</system.serviceModel>
</configuration>
为什么在调试模式下会发生异常?
UPD
决定的其他变体:
#if DEBUG
System.Threading.Thread.Sleep(1000);
#endif
答案 0 :(得分:0)
它们实际上没有被忽略,它是expected behaviour:
注意:如果无法建立与服务端点的连接 所有(即服务无法访问),WCF不会抛出 相反,TimeoutException会抛出一个 EndpointNotFoundException - 立即。
我不确定是否有办法正确地做到这一点(至少我找不到任何标准 - Time taken to throw EndPointNotFoundException),但你总是可以创建自己的错误重新初始化机制(最简单的,但不是最好的解决方案就是抓住EndpointNotFoundException
并尝试稍后重新初始化客户端。