2011-02-01 17 views
5

मेरे पास कुछ हद तक लंबी डब्लूसीएफ-आधारित प्रक्रिया है। यदि किसी भी मदद की है तो डब्ल्यूसीएफ सेवा Azure में चलता है।डब्ल्यूसीएफ टाइमआउट मुद्दा?

<wsHttpBinding> 
    <binding name="XXX" closeTimeout="00:05:00" openTimeout="00:05:00" 
    receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" 
    transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
    maxBufferPoolSize="10000000" maxReceivedMessageSize="10000000" 
    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
    allowCookies="false"> 
    <readerQuotas maxDepth="255" maxStringContentLength="8192" maxArrayLength="16384" 
    maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
    enabled="false" /> 
    <security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
    <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="false"/> 
    </security> 
    </binding> 
</wsHttpBinding> 

2) WCF सेवा web.config में निम्नलिखित बाध्यकारी अनुभाग है:

1) Winforms ग्राहक बाध्यकारी अनुभाग में निम्न .config सेटिंग है: मुद्दा मेरा मानना ​​है कि समय समाप्ति के साथ क्या करना है

<wsHttpBinding> 
    <binding name="XXX" maxReceivedMessageSize="10000000" sendTimeout="00:10:00" receiveTimeout="00:10:00" closeTimeout="00:10:00" openTimeout="00:10:00"> 
    <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName" establishSecurityContext="false" /> 
    </security> 
    <readerQuotas maxArrayLength="2000000" maxBytesPerRead="10000000" maxStringContentLength="10000000" maxDepth="255" /> 
    </binding> 

    </wsHttpBinding> 

3) मेरे पास डब्ल्यूसीएफ (आमतौर पर 2 मिनट) में एक लंबी चल रही विधि है। ग्राहक विधि को कॉल करते हैं, और जो लंबे समय तक निष्पादित करते हैं, उन्हें 1 मिनट के बाद अपवाद के साथ फेंक दिया जाता है। यह सबसे भीतरी अपवाद है:

<InnerException> 
    <Type>System.Net.Sockets.SocketException</Type> 
    <Message>An existing connection was forcibly closed by the remote host</Message> 
    <StackTrace> 
     <Frame>at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)</Frame> 
    </StackTrace> 
    </InnerException> 
</InnerException> 

4) WCF सफलतापूर्वक पूरा कर लिया ही फोन है, तथापि (मैं दोनों आरंभ/समाप्ति सर्वर साइड पर लॉग ऑन)। मैं अपवाद से कैसे बचूं?

धन्यवाद!

+0

कभी भी यह एक मिनट से अधिक लेता है चलाने के लिए, यह है कि त्रुटि देता है। त्रुटि एक मिनट के ठीक बाद ग्राहक को वापस कर दी जाती है। सर्वर अभी भी विधि कॉल को खत्म कर रहा है। – Igorek

उत्तर

8

विंडोज़ एज़ूर लोड बैलेंसर 60 सेकंड के बाद निष्क्रिय कनेक्शन को समाप्त करता है।

+1

स्टीव, वाह, पूरी तरह से यह नहीं पता था ... क्या टाइमआउट का विस्तार करने के लिए वैसे भी है? कुछ कॉल को पूरा होने में 1 मिनट लग सकते हैं! – Igorek

+0

दिलचस्प। स्टीव इस व्यवहार को संशोधित करने का कोई तरीका है, या कतार या किसी अन्य क्रॉस-टास्क विधि के साथ कार्यकर्ता भूमिका में खेती की जाने वाली लंबी दौड़ वाली नौकरियों का इरादा है? –

+0

इसे बदलने के लिए वर्तमान में कोई रास्ता नहीं है। हालांकि, यदि आप समय-समय पर टीसीपी कनेक्शन में डेटा भेज सकते हैं, तो यह खुला रहेगा। (यह केवल _idle_ कनेक्शन है जो समाप्त हो जाते हैं।) – smarx

0

अपडेट किया गया जवाब:

Azure लोड संतुलन 4 मिनट के बाद निष्क्रिय कनेक्शन समाप्त हो जाता है। आप बढ़ती/घटते टाइमआउट मान में रुचि रखते हैं, इस लेख की जाँच:

https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/

संबंधित मुद्दे