2011-05-30 39 views
15

我在主機下面的app.config:如何設置的receiveTimeout和的SendTimeout到無窮大與此WCF接觸?

<services> 
    <service name="DCC_Service.DCCService" behaviorConfiguration="serviceBehavior"> 
    <endpoint binding="netNamedPipeBinding" contract="DCC_Service.IDCCService" address="DCCService" /> 
    <endpoint binding="mexNamedPipeBinding" contract="IMetadataExchange" address="mex" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.pipe://localhost/"/> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="serviceBehavior"> 
     <serviceMetadata httpGetEnabled="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

如何設置netNamedPipeBinding超時爲無窮又名Timespan.MaxValue

回答

20

使用infinite的各種超時值 - 關閉,開放,接收和發送。您可以像這樣在綁定配置中指定這些超時。

<bindings> 
    <netNamedPipeBinding> 
     <binding name="mybinding" closeTimeout="infinite" openTimeout="infinite" 
      receiveTimeout="infinite" sendTimeout="infinite" /> 
    </netNamedPipeBinding> 
</bindings> 

bindings的去部分在相同的水平servicesbehaviors部分。剩下的唯一事情就是引用服務端點中的綁定配置。

<services> 
    <service name="DCC_Service.DCCService" behaviorConfiguration="serviceBehavior"> 
    <endpoint binding="netNamedPipeBinding" 
     contract="DCC_Service.IDCCService" 
     address="DCCService" 
     bindingConfiguration="mybinding"/>   <!-- SEE THIS LINE --> 
    <endpoint binding="mexNamedPipeBinding" 
     contract="IMetadataExchange" 
     address="mex" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.pipe://localhost/"/> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="serviceBehavior"> 
     <serviceMetadata httpGetEnabled="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

我具體不記得了(我沒有時間,現在看),但你可能要放這個東西在你的客戶端配置爲好。

+1

感謝馬特。我將以下內容添加到我的客戶端:'NetNamedPipeBinding binding = new NetNamedPipeBinding(); binding.SendTimeout = TimeSpan.MaxValue; binding.ReceiveTimeout = TimeSpan.MaxValue;'然後在實例化我的雙工通道工廠時使用該綁定。 – 2011-05-30 16:15:04

+0

我添加了' ...'但是VS是強調每個'「無限」'藍色值與無效的參數消息。例如'的\'openTimeout \'屬性無效 - 值\'無限\'根據其數據類型\'字符串\'是無效的 - 該模式的約束failed.' – 2011-05-30 16:21:59

+6

我相信這是一個Visual Studio神器。在運行時使用「無限」字符串可以正確處理。在這裏看到了答案:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/46f9f3ad-da26-493d-9743-895ee9bd4c61/ – 2011-05-30 16:28:21

6

將其設置爲最大時間跨度是10675199.02:48:05.4775807

sendTimeout="10675199.02:48:05.4775807" 
+0

我不得不使用這個,因爲「無限」在config中給出了一個警告:Value根據其數據類型:「字符串」,「無限」無效。雖然你的處方是有限的,但當它最終超時時,我會很長時間死亡,所以我的應用程序:) – LastTribunal 2016-08-20 00:02:09

4

您也可以提供最大超時像下面

{

  binding.CloseTimeout = TimeSpan.MaxValue; 

      binding.OpenTimeout = TimeSpan.MaxValue; 

      binding.ReceiveTimeout = TimeSpan.MaxValue; 

      binding.SendTimeout = TimeSpan.MaxValue; 

}

+0

@Ricardo Pontual:除了添加空格,我可以找到答案的任何改進。這不是你如何改進答案。刪除了您的更改, – Hari 2016-11-02 08:11:06

+2

您應該知道'{}'是代碼的一部分,我編輯了代碼塊。真的,這不會改善問題,但格式良好的代碼對所有開發人員來說都是一個好習慣。 – 2016-11-03 00:55:01