2009-05-28 17 views
15

मेरे पास एक क्लाइंट एप्लिकेशन है जो .NET सेवा में अनुरोध करता है और सेवा को डब्ल्यूसीएफ सेवा के लिए अनुरोध करता है और 1 मिनट में निष्पादन समय भेजना चाहता है, अगर कोई त्रुटि नहीं है, तो त्रुटि से 1 मिनट से अधिक हैडब्ल्यूसीएफ विंडोज सर्विस टाइमऑट

इनर अपवाद: यह अनुरोध आपरेशन net.tcp के लिए भेजा: // स्थानीय होस्ट: 18001/PitToPort/2008/01/30/StockpileService/टीसीपी के लिए कॉन्फ़िगर टाइमआउट के भीतर एक उत्तर प्राप्त नहीं हुआ (00:01:00)।
इस ऑपरेशन को आवंटित समय लंबे समय तक का एक हिस्सा हो सकता है। ऐसा इसलिए हो सकता है क्योंकि सेवा अभी भी संचालन को संसाधित कर रही है या क्योंकि सेवा एक उत्तर संदेश भेजने में असमर्थ थी। आपरेशन टाइमआउट बढ़ती (चैनल/IContextChannel करने के लिए प्रॉक्सी कास्टिंग और OperationTimeout संपत्ति की स्थापना द्वारा) पर विचार करने और यह सुनिश्चित करें कि सेवा ग्राहक

कैसे समय को बढ़ाने के लिए बाहर और कैसे करने के लिए कनेक्ट करने में सक्षम है कृपया? सबसे अच्छा समाधान क्या है?

उत्तर

4

मैं सेवा एप्लिकेशन कोड

system.transactions 
    defaultSettings timeout="00:30:00" 

इस कोड के साथ के लिए निम्न कोड जोड़ने के लिए सेवा प्रक्रिया डेटाबेस सर्वर में करवाने के लिए 30 मिनट तक प्रतीक्षा और

में वृद्धि होगी
maxBufferSize="2147483647" 
maxReceivedMessageSize="2147483647" 
maxBufferPoolSize="2147483647" 

क्लाइंट बाध्यकारी विशेषताओं में, तो यह ठीक काम करता है।

समस्या: सेवा प्रतिक्रिया भेज रही है लेकिन क्लाइंट बफरसाइज कम था, मैं अधिकतम बफर आकार में वृद्धि हुई।

+2

ऐसा लगता है कि यह एक 2 जीबी अनुरोध को थ्रेड को बांधने की अनुमति देगा 30 मिनट, इसे डीडीओएस के लिए एक आसान लक्ष्य बनाते हैं। – Webveloper

14

टाइमआउट को "sendTimeout" कहा जाता है और आप इसे अपने कॉन्फ़िगरेशन फ़ाइल में या कोड में अपनी बाध्यकारी अनुभाग पर कॉन्फ़िगर कर सकते हैं - आपकी पसंद।

config:

<system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding sendTimeout="00:03:00" /> 
     </netTcpBinding> 
    </bindings> 

यह 3 मिनट के लिए समय समाप्ति सेट हो जाएगा।

मार्क

+1

क्या हमें दोनों सिरों (क्लाइंट कॉन्फ़िगरेशन और सर्वर कॉन्फ़िगरेशन) पर लिखने की आवश्यकता है? – rmdussa

+0

मैं "00:30:00" के साथ की कोशिश की है फिर भी मैं त्रुटि गर्तिका कनेक्शन रद्द कर दिया गया मिलता है। यह आपके संदेश को संसाधित करने में त्रुटि या रिमोट होस्ट, या अंतर्निहित नेटवर्क संसाधन समस्या से अधिक टाइमआउट प्राप्त करने के कारण हो सकता है। स्थानीय सॉकेट टाइमआउट '00: 2 9: 57.8030000 'था। – rmdussa

+1

, लेकिन वास्तव में यह 30 मिनट तक प्रतीक्षा नहीं है, यह serverside पर 1 मिनट – rmdussa

61

सावधान रहें, यह त्रुटि संदेश एक बॉयलरप्लेट स्ट्रिंग है डब्ल्यूसीएफ भेजता है जब उसके पास कोई सुराग नहीं होता है। इसका वास्तव में मतलब है "एमएमएच श्रृंखला में कुछ गड़बड़ हुई लेकिन मुझे सच में यकीन नहीं है कि, कॉन्फ़िगरेशन के बारे में कुछ जानकारी यहां दी गई है, जो आप चाहते हैं उसे करें"।

उस समय जब आप यह संदेश प्राप्त करते हैं तो वास्तविक समय के साथ इसका कोई लेना-देना नहीं है। यह कोटा (ग्राफ़, समग्र आकार, सरणी लंबाई में ऑब्जेक्ट्स की संख्या) या कुछ गलत सर्वर-साइड चला गया है, उस समय के बीच जब आपकी सेवा विधि ने परिणाम दिया था और वास्तविक बाइट तार पर भेजे गए थे। इसलिए, आपको अपनी कॉन्फ़िगरेशन सेटिंग्स (और टाइमआउट नहीं, अगर आपको वास्तव में त्रुटि प्राप्त करने के लिए एक मिनट का इंतजार करना पड़ा था, तो उसे छोड़ना चाहिए। अगर आपको तुरंत त्रुटि मिल गई है, तो इसमें टाइमआउट के साथ कुछ भी नहीं है)।

यह बेकार संदेश डब्ल्यूसीएफ परेशानियों की मेरी सूची के शीर्ष पर है।

+1

प्रैक्टिकल एक्सपीरियंस और 1 से बात कर रहा हूं। आईएसयूयू टाइमआउट (डेटाबेस सर्वर में डब्ल्यूसीएफ सेवा प्रसंस्करण संबंधित प्रक्रिया 2 मिनट से अधिक समय ले रही है) 2. प्रतिक्रिया returmns सूची [] आकार 400 तत्व, यदि हम 100 तत्वों को वापस करने का प्रयास करते हैं तो कोई त्रुटि नहीं, अगर हम पूर्ण सूची लौटाते हैं तो उसकी फेंकने वाली त्रुटि, तो हम वास्तविकता को बफर के कारण करते हैं आकार। यदि हम सर्वर पक्ष में समय नहीं बढ़ा रहे हैं तो भी इसकी विफलता है, इसलिए मेरे मामले में – rmdussa

+0

दोनों करना है, मैं सहमत हूं, यह बॉयलरप्लेट है क्योंकि आपको कुछ के लिए काम करने वाले विभिन्न समाधान मिलेंगे, न कि दूसरों के लिए। मेरे लिए, यह एक कंसोल ऐप था जिसे मैं गैर-डब्ल्यूसीएफ (जावा आधारित) सेवा का परीक्षण करने के लिए शुरू कर रहा था। सोपूआई में मिलीसेकंड लेते हैं, लेकिन कम से कम 3 सेकंड लेते हैं और कभी-कभी मेरे ऐप का उपयोग करके टाइमआउट भी करेंगे। मुझे लगता है कि कनेक्शन पूल और अन्य सामान को ऐप शुरू करते समय प्रारंभ करने के लिए समय चाहिए। मैंने अपना SendTimeout 5 मिनट तक सेट किया है और यह ठीक है। नोट: ऐप के भीतर सेवा के लिए एकाधिक कॉल (इसे लॉन्च करने के बाद) मिलीसेकंड में हुई। c.Endpoint.Binding.SendTimeout = नया टाइमस्पैन (0, 5, 0); – MikeTeeVee

0

यदि आपको पता है कि क्लाइंट को जवाब देने के लिए सर्वर एक मिनट से अधिक समय क्यों ले रहा है, तो आपको चैनल के ऑपरेशनटाइमआउट का विस्तार करना चाहिए (जैसा कि यह त्रुटि संदेश में कहता है)।इस बाहर

चेक, अंत में एक कोड नमूना सहित: http://final-proj.blogspot.com/2009/09/wcf-timeouts.html

गुड लक।

0

यहां एक बहुत ही आसान समाधान है ... बस वर्तमान क्लाइंटबेस पर संपत्ति सेट करें। दूसरे शब्दों में, पहले एक सेवा संदर्भ जोड़ने के लिए, initalize यह है, तो संपत्ति "InnerChannel.OperationTimeout"

NetUtilsWCF.SMTPDiagClient sClient = नए NetUtilsWCF.SMTPDiagClient() सेट;

sClient.InnerChannel.OperationTimeout = नया टाइमस्पैन (0, 5, 0);

1

मुझे यह वही त्रुटि मिली। विशेष रूप से, अपवाद है कि मैं प्राप्त था:

System.ServiceModel.CommunicationException: गर्तिका कनेक्शन था निरस्त किया गया। यह आपके संदेश को संसाधित करने में त्रुटि या दूरस्थ होस्ट द्वारा टाइमआउट को पार करने, या अंतर्निहित नेटवर्क संसाधन समस्या प्राप्त करने के कारण हो सकता है। स्थानीय सॉकेट टाइमआउट '00: 09: 59.9 4 9 0000 'था।

System.IO.IOException: लेखन ऑपरेशन विफल रहा, आंतरिक अपवाद देखें।

सिस्टम.ServiceModel.CommunicationException: सॉकेट कनेक्शन निरस्त किया गया था।

यह आपके संदेश को संसाधित करने में त्रुटि के कारण हो सकता है या रिमोट होस्ट द्वारा समाप्त होने वाला टाइमआउट, या अंतर्निहित नेटवर्क संसाधन समस्या प्राप्त हो सकता है।

स्थानीय सॉकेट टाइमआउट '00: 09: 59.9940000 'था।

System.Net.Sockets.SocketException: एक मौजूदा कनेक्शन जबरन दूरस्थ होस्ट

मेरी समस्या का कारण संदेश है कि मेरे WCF क्लाइंट से भेजा जा रहा था के आकार की वजह से था द्वारा बंद कर दिया गया था डब्ल्यूसीएफ मेजबान के लिए। जाहिर है, संदेश का आकार बहुत बड़ा था।

समस्या को ठीक करने के लिए, मैं 8000000 को 2097152 से मेजबान Web.Config maxReceivedMessageSize विशेषता बदल गया है और त्रुटि नहीं रह बनाए।

<netTcpBinding> 
<binding name="NetTCPBinding" maxReceivedMessageSize="8000000"> 
.... 
</binding> 
</netTcpBinding> 

8M संदेश आकार है कि मैं कितना बड़ा मैं "लगता है कि" पर आधारित था चुना संदेश आकार है:

यहाँ Web.Config के गुण मैं की बात कर रहा हूँ। मुझे क्लाइंट से मेजबान में जाने वाले वास्तविक डब्ल्यूसीएफ संदेश के आकार को स्पष्ट रूप से निर्धारित करने का एक तरीका पता नहीं है।

1

इस चेक बाहर, त्रुटि के समान प्रकार के लिए यू OperationTine बाहर संपत्ति http://www.codeproject.com/KB/WCF/WCF_Operation_Timeout_.aspx

+1

संक्षेप में: 'चैनलफ़ैक्टरी से लौटाई गई ऑब्जेक्ट को कास्ट करें। क्रेतेचनल() '- जिसे आप सामान्य रूप से' IContextChannel' (हाँ, यह काम करता है) पर अपने ऑपरेशन का आह्वान करते हैं और उस पर 'ऑपरेशनटाइमआउट' प्रॉपर्टी सेट करते हैं। – ygoe

-3

सेट करने के लिए कॉन्फ़िग फ़ाइल को सही तो आप इस विशेषता को जांच करने के लिए आवश्यकता हो सकती है के बाद समस्या का सामना कर रहे हैं की है। "OperationContract(IsOneWay:=True)". यदि आप IsOneWay:=True विशेषता याद करते हैं तो यह समस्या उत्पन्न कर सकती है।

+1

पूरी तरह लागू नहीं है, उन तरीकों के लिए उपयोग किया जाता है जो कुछ भी वापस नहीं करते हैं! – dudeNumber4

-1

मुझे कॉलबैक का उपयोग करते समय एक ही अपवाद मिला। यह स्थानीय परीक्षण में काम करता है (क्लाइंट और सेवा प्रोग्राम एक ही मशीन में चल रहे हैं) लेकिन उपयोगकर्ता पर्यावरण में काम नहीं करते हैं (सेवा कार्यक्रम विजेता 2008 में चलता है)। सर्वर कोड लॉग के अनुसार निष्पादित किया गया है। मुझे लगता है कि यह पर्यावरण या प्राधिकारी की समस्या के कारण है, लेकिन यह नहीं पता कि कैसे संभालना है।

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