我的解决方案包含两个项目:WCF服务和WCF客户端。启动顺序:
当我手动启动服务并稍后启动客户端时,它可以正常运行。但是,如果我在调试模式下通过IDE进行了同样的操作,那么我有时会得到一个例外:
类型的未处理的异常
System.ServiceModel.EndpointNotFoundException
发生在mscorlib.dll
附加信息:
net.pipe://localhost/
可以接受该消息的任何端点都没有执行侦听。除其他原因外,它可能是由于SOAP错误的地址或操作引起的。有关更多详细信息,请参见InnerException的描述(如果可用)。
但是我客户端的Config
-file包含超时设置:
<?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
实际上并没有忽略它们,这是预期的行为:
注意:如果根本无法建立与服务端点的连接(即,服务不可访问),则WCF不会引发TimeoutException,而是框架会立即引发EndpointNotFoundException。
我不确定是否有办法正确执行此操作(至少我找不到标准的东西-抛出EndPointNotFoundException所需的时间),但是您始终可以创建自己的错误重新初始化机制(最简单的方法,但不是最好的解决方案是赶上EndpointNotFoundException
并稍后尝试重新初始化客户端)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句