WCF

2010-08-12 16 views
16

में HTTP कनेक्शन के लिए जीवित अंतराल को कैसे सेट करें, डब्ल्यूसीएफ में एचटीपी ट्रांसपोर्ट चैनल डिफ़ॉल्ट रूप से लगातार HTTP कनेक्शन का उपयोग करता है। उन कनेक्शनों के लिए जिंदा टाइमआउट कैसे नियंत्रित करें? डिफ़ॉल्ट मान 100 है। मैंने प्रोमोमन में अनुप्रयोग की निगरानी करके उस मूल्य को पाया। मुझे http परिवहन बाध्यकारी तत्व में कोई सेटिंग नहीं मिली है जो इस टाइमआउट को कॉन्फ़िगर करता है। क्या कोई .NET क्लास है जो उस टाइमआउट को नियंत्रित कर सकती है?WCF

उत्तर

7

यहाँ एक नज़र डालें:

http://web.archive.org/web/20080721055556/http://blog.magenic.com/blogs/jons/archive/2007/05/04/The-Tao-of-Microsoft-WCF-CustomBinding-Configuration-Elements.aspx

वहाँ एक http कनेक्शन के दौरान जिंदा संपत्ति रखने के जोड़ तोड़ की विस्तृत चर्चा है।

+2

धन्यवाद समान है, लेकिन इस सवाल का जवाब नहीं है। प्रश्न जीवित रहने के बारे में नहीं है, लेकिन जीवित टाइमआउट रखने के बारे में सवाल नहीं है। तो मैं जिंदा मोड़ रखना चाहता हूं और मैं इसकी अवधि को नियंत्रित करना चाहता हूं। –

+3

यूआरएल नहीं मिला, यह एक दयालुता – Kiquenet

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 प्रोटोकॉल विनिर्देश में वर्णित है। –

+0

ऐसा लगता है कि आरएफसी 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.1) के अनुसार HTTP कनेक्शन हमेशा जारी रहना चाहिए। – louisgab

+1

मुझे ऐसा नहीं लगता है। आरएफसी का कहना है कि HTTP कार्यान्वयन को HTTP निरंतर कनेक्शन लागू करना चाहिए। ऐसा नहीं है कि केवल लगातार कनेक्शन का उपयोग किया जाना चाहिए। –

0

यह कैसे के बारे में? ऐसा लगता है कि यह आपके आईआईएस सर्वर का एक फंक्शन हो सकता है और डब्ल्यूसीएफ सेवा से कोई लेना देना नहीं है? मुझे पता है कि यह लिंक आईआईएस 6 पर लागू होता है, लेकिन शायद यह आईआईएस 7 में समान कुछ के आधार पर कार्य करता है? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true

+1

मैंने पहले ही आईआईएस पर कनेक्शन टाइमआउट सेट अप करने का प्रयास किया है और यह काम नहीं करता है। यह जीवित सेटिंग रखने से संबंधित नहीं है। वैसे भी मैं इसे अगले कुछ दिनों में फिर से कोशिश करूंगा। यदि यह काम करता है तो मैं नया बक्षीस निर्धारित करूंगा और आपको पुरस्कार दूंगा। –

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

यह विचार दिलचस्प है। मैंने कैसिनी के साथ संचार में ऐसा कुछ देखा लेकिन मुझे लगता है कि यह मानक हेडर नहीं है। वैसे भी मैं इसे अगले कुछ दिनों में कोशिश करूंगा। यदि यह काम करता है तो मैं नया बक्षीस निर्धारित करूंगा और आपको पुरस्कार दूंगा। –

+0

बीटीडब्ल्यू। मुझे इसका इस्तेमाल करने की ज़रूरत नहीं है। मैं सिर्फ यह जानना चाहता हूं कि इसे किसी भी तरह से बदलना संभव है और जहां डिफ़ॉल्ट मान 100 से आता है। –

+0

@ लादिस्लाव मृका: इस पुरानी पोस्ट को बाहर निकालने के लिए खेद है, लेकिन क्या आप इस HTTP रख-रखाव मूल्य को सेट या पढ़ सकते हैं।यदि हां, तो मुझे इसके बारे में अधिक जानने में बहुत दिलचस्पी होगी। धन्यवाद –

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?