2010-05-04 9 views
6

हमारे पास एक डब्ल्यूसीएफ सेवा (बेसिक एचटीपी बाइंडिंग) है जो हमेशा 30 सेकंड के बाद विफल हो जाएगी। त्रुटि के बिना 30 सेकंड के तहत कॉल पूरा हो जाता है। 30 सेकंड से अधिक कुछ भी एक 502 खराब गेटवे अपवाद के साथ असफल हो जायेगी:डब्ल्यूसीएफ सेवा कॉल हमेशा 30 सेकंड के बाद विफल रहता है (502) खराब गेटवे

System.Net.WebException: The remote server returned an error: (502) Bad Gateway.

लेकिन अभी तक WCF कॉल पृष्ठभूमि में चलाने के लिए जारी है (और अंत में पूरा हो जाएगा)। हमने पुष्टि की है कि BasicHttp बाइंडिंग - बाध्यकारी - sendTimeout (web.config में) 30 सेकंड से अधिक है (वास्तव में 5 मिनट तक सेट)। हमने क्लाइंट और सर्वर दोनों पर इसकी पुष्टि की।

यहाँ पूर्ण स्टैक ट्रेस है:

System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (502) Bad Gateway. ---> System.Net.WebException: The remote server returned an error: (502) Bad Gateway. 
    at System.Net.HttpWebRequest.GetResponse() 
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
    --- End of inner exception stack trace --- 

Server stack trace: 
    at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding) 
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
    at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) 
    at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 

कोई भी विचार जहां इस 30 सेकंड "टाइमआउट" से आ रहा है या क्यों एक 502 खराब गेटवे त्रुटि दी है?

समाधान: हम आईआईएस 7 एप्लिकेशन अनुरोध रूटिंग मॉड्यूल का उपयोग कर रहे हैं जिसमें इसकी प्रॉक्सी सेटिंग्स हैं। प्रॉक्सी सेटिंग्स में 30 सेकंड का डिफ़ॉल्ट टाइमआउट होता है। 600 सेकंड (10 मिनट) तक इसे बढ़ाने से हमारी समस्या हल हो गई। खराब गेटवे त्रुटि पूरी तरह से सही नहीं है लेकिन डब्ल्यूसीएफ ट्रेस व्यूअर (उत्तर देखें) ने यह देखने में मदद की कि समस्या स्वयं सेवा नहीं थी बल्कि क्लाइंट और डब्ल्यूसीएफ सेवा के बीच एक मुद्दा था।

उत्तर

5

आप अन्य टाइमआउट config मूल्यों को संशोधित करने की कोशिश देखने के लिए चाहते हो सकता है:

closeTimeout, openTimeout, recieveTimeout।

config आइटम के बारे में जानकारी के लिए this MSDN post देखें, नीचे सारांश:

Client side:

  • SendTimeout is used to initialize the OperationTimeout, which governs the whole interaction for sending a message (including receiving a reply message in a request-reply case). This timeout also applies when sending reply messages from a CallbackContract method.
  • OpenTimeout and CloseTimeout are used when opening and closing channels (when no explicit timeout value is passed).

Server side:

  • Send, Open, and Close Timeout same as on client (for Callbacks).
  • ReceiveTimeout is used by ServiceFramework layer to initialize the session-idle timeout.

जोड़ा:

केवल दूसरी बात मैं कर सकते हैं सुझाव WCF सेवा ट्रेस व्यूअर का उपयोग करने की तह तक पहुंचने के लिए है समस्या क्या हो रही है। यह SO Post देखें यदि आपको इसका उपयोग करने के तरीके के विवरण की आवश्यकता है।

+0

हमने क्लोजटाइमआउट, ओपनटाइमआउट बढ़ाने और 5 मिनट (क्लाइंट और सर्वर पर) प्राप्त करने का प्रयास किया है और अभी भी समस्या को देखते हैं। –

+0

डब्ल्यूसीएफ सेवा ट्रेस व्यूअर की जानकारी के लिए धन्यवाद। मैंने इसे क्लाइंट और सर्वर दोनों पर एक ट्रेस इकट्ठा करने के लिए उपयोग किया लेकिन मैं इसे देख रहा हूं कि सर्वर ठीक से पूरा कर रहा है लेकिन क्लाइंट आंतरिक संदेश के साथ "खराब HTTP प्रतिक्रिया प्राप्त हुआ" के साथ समाप्त होता है "रिमोट सर्वर लौटा एक अप्रत्याशित प्रतिक्रिया: (502) खराब गेटवे। " सर्वर 42 सेकंड के बाद पूरा हो जाता है और क्लाइंट को 31 सेकंड में त्रुटि मिलती है।यह हमेशा ग्राहक के लिए 31 सेकंड है। –

+0

इसे समझ लिया। हम आईआईएस 7 एप्लिकेशन अनुरोध रूटिंग मॉड्यूल का उपयोग कर रहे हैं जिसमें प्रॉक्सी सेटिंग्स हैं जिनमें से एक 30 सेकंड टाइमआउट था। डब्ल्यूसीएफ सेवा ट्रेस व्यूअर का उपयोग करने से मुझे यह समझने में मदद मिली कि डब्ल्यूसीएफ सेवा समस्या नहीं थी लेकिन ग्राहक और सेवा के बीच कुछ थी। –

0

मैंने आज खुद ही इस समस्या को मारा है। एसएल 4 ऐप से डब्लूसीएफ webservice में एक फ़ाइल अपलोड करने से 30secs के बाद कनेक्शन कनेक्शन अपवाद उठाया गया।

मैं के रूप में माइक्रोसॉफ्ट द्वारा सिफारिश की सिल्वरलाइट में दोष अपवाद संचालन काबू पाने के लिए समस्या का कारण पाया WebRequest.RegisterPrefix पद्धति के उपयोग होने के लिए:

bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 

देखें http://msdn.microsoft.com/en-us/library/ee844556(v=vs.95).aspx

1

आईआईएस -> उन्नत सेटिंग्स -> कनेक्शन सीमाएं

वांछित राशि में उस संख्या (सेकेंड में) बढ़ाएं।

उम्मीद है कि यह किसी भी Googlers वहाँ मदद करता है!

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