为什么忽略我的*超时设置?

时间:2016-04-16 13:54:00

标签: c# wcf

我的解决方案包含两个项目:WCF服务和WCF客户端。启动顺序:

enter image description here

当我手动启动我的服务时,以后我的客户端工作正常。但是如果我在调试模式下通过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

1 个答案:

答案 0 :(得分:0)

它们实际上没有被忽略,它是expected behaviour

  

注意:如果无法建立与服务端点的连接   所有(即服务无法访问),WCF不会抛出   相反,TimeoutException会抛出一个   EndpointNotFoundException - 立即。

我不确定是否有办法正确地做到这一点(至少我找不到任何标准 - Time taken to throw EndPointNotFoundException),但你总是可以创建自己的错误重新初始化机制(最简单的,但不是最好的解决方案就是抓住EndpointNotFoundException并尝试稍后重新初始化客户端。