2010-08-12 47 views
16

默認情況下,WCF中的Http傳輸通道使用持久HTTP連接。如何控制這些連接的保持活動超時?默認值是100秒。通過在Procmon中監控應用程序,我發現了這個價值。我沒有在http傳輸綁定元素中找到任何配置此超時的設置。有沒有可以控制超時的.NET類?如何在WCF中爲HTTP連接設置保持活動時間間隔

回答

7
+2

感謝後,但並沒有解答的問題。問題不是關閉保持活動,而是關於設置保持活動超時。所以我想保持活力,我想控制它的持續時間。 – 2010-08-23 21:22:14

+3

未找到網址,很遺憾 – Kiquenet 2012-11-19 12:04:44

0

this answer和我可以讀的here,它看起來像你想創建一個自定義http綁定,並設置inactivityTimeout屬性。

從MSDN文章:

<bindings> 
    <customBinding> 
    <binding name="Binding1"> 
     <reliableSession acknowledgementInterval="00:00:00.2000000" enableFlowControl="true" 
         maxTransferWindowSize="32" inactivityTimeout="00:10:00" maxPendingChannels="128" 
         maxRetryCount="8" ordered="true" /> 
     <security mode="None"/> 
     <httpTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false" 
        hostNameComparisonMode="StrongWildcard" 
        proxyAuthenticationScheme="Anonymous" realm="" 
        useDefaultWebProxy="true" /> 
    </binding> 
    </customBinding> 
</bindings> 
+1

不。我想設置HTTP保持活動狀態而不是可靠會話保持活動狀態。 HTTP協議規範中描述了HTTP保持活動狀態。 – 2010-08-24 14:17:50

+0

像HTTP 2616(http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.1)一樣,HTTP連接似乎應該是持久的。 – louisgab 2010-08-24 18:24:10

+1

我不這麼認爲。 RFC表示HTTP實現應該實現HTTP持久連接。並不是只應該使用持續連接。 – 2010-08-25 07:34:54

0

這個怎麼樣?似乎它可能是您的IIS服務器的功能,與WCF服務無關?我知道這個鏈接適用於IIS6,但也許它是IIS7中類似的基礎? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true

+1

我已經嘗試在IIS上設置連接超時,但它不起作用。這與保持活動設置無關。無論如何,我會在接下來的幾天再嘗試一次。如果它有效,我會設置新的獎勵和獎勵你。 – 2010-08-25 22:00:07

1

這聽起來像你想調整Keep-Alive HTTP標頭。您應該閱讀HTTP保持存活的this article,並首先確定這是否值得你花時間。

如果是,請嘗試創建一個Message Inspector。這應該允許您修改發送的每封郵件的HTTP標頭:

public class KeepAliveMessageInspector : IClientMessageInspector 
{ 
    // ... 

    public object BeforeSendRequest(
     ref System.ServiceModel.Channels.Message request, 
     System.ServiceModel.IClientChannel channel) 
    { 
     // Add/modify the Keep-Alive header 
     var httpRequestMessage = new HttpRequestMessageProperty(); 
     httpRequestMessage.Headers.Add("Keep-Alive", "9000"); 
     request.Properties.Add(
      HttpRequestMessageProperty.Name, httpRequestMessage); 
     return null; 
    } 

    // ... 
} 
+2

這個想法很有趣。我看到了與卡西尼交流的情況,但我認爲這不是標準頭。無論如何,我會在接下來的幾天內嘗試。如果它有效,我會設置新的獎勵和獎勵你。 – 2010-08-25 22:02:26

+0

順便說一句。我不需要使用它。我只是想知道是否有可能以某種方式改變它,以及默認值100s來自哪裏。 – 2010-08-25 22:03:17

+0

@Ladislav Mrnka:對不起,你可以設置或閱讀這個HTTP保持活着的值。如果是的話,我會非常有興趣瞭解更多。謝謝 – 2014-06-06 12:15:12

1

我找到了解決方案。問題是底層內核http.sys有它自己的超時,它會中斷連接。

http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/ 

netsh http add timeout timeouttype=idleconnectiontimeout value=120 

而且,這個問題是類似於此What 130 second timeout is killig my WCF streaming service call?

相關問題