2011-08-30 14 views
20

मुझे विश्वास है कि मैं HttpWebRequest.Timeout और HttpWebRequest.ReadWriteTimeout के बीच व्यावहारिक अंतर को समझता हूं। हालांकि, मैं और इन दो टाइमआउट्स के बीच अंतर पर स्पष्टता की मांग कर रहा हूं, जिसमें अंतर्निहित टीसीपी कनेक्शन/बफर/राज्य लागू होने पर इन मानों का क्या अर्थ हैHttpWebRequest का टाइमआउट और रीडवाइटटाइमआउट - अंतर्निहित टीसीपी कनेक्शन के लिए इसका क्या अर्थ है?

उदाहरण के लिए, क्या ये टाइमआउट केवल टीसीपी कनेक्शन के प्रारंभ के दौरान उपयोग किए जाते हैं, या अप्रबंधित कनेक्शन को देखने के लिए ये केवल प्रबंधित मान हैं?

टीसीपी शर्तों में क्लाइंट-सर्वर परिदृश्य क्या हैं जहां इनमें से प्रत्येक टाइमआउट लागू होगा या लागू नहीं होगा?

उत्तर

13

इस समस्या पर एक अन्य प्रश्न पर बहस हुई है, Adjusting HttpWebRequest Connection Timeout in C# देखें। चर्चा ने मेरा सिर स्पिन बनाया, इसलिए मैं अपना सारांश प्रस्तुत करूंगा।

हालांकि, एमएसडीएन बताता है कि HttpWebRequest.Timeout PropertyHttpWebRequest.GetResponse और HttpWebRequest.GetRequestStream कॉल पर लागू होता है, विवरण थोड़ा उलझन में है।

Jim Mischel अधिक उपयोगी है: Timeout "सर्वर के अनुरोध का जवाब देने का समय है, सर्वर का जवाब देने और सभी डेटा भेजने के लिए प्रतीक्षा करने का समय नहीं है।" इस प्रकार, Timeout एक कामकाजी कनेक्शन स्थापित करने में शामिल हैं। बड़े पेलोड के लिए, यह इस बात का तात्पर्य नहीं है कि अनुरोध/उत्तर पूरा हो गया है।

ReadWriteTimeout कनेक्शन पर संचारित धाराओं को पढ़ने या लिखने के लिए लागू होता है। जैसे जब आप GetRequestStream द्वारा लौटाई गई स्ट्रीम में लिखते हैं। कनेक्शन पहले से स्थापित है, लेकिन एक जोखिम है कि यह तोड़ देगा। जैसे नेटवर्क कनेक्शन नीचे चला जाता है।

जिम मिशेल लिंक के पास इन टाइमआउट को निर्धारित करने के मूल्यों पर कुछ बहुत अच्छी सलाह है। अर्थात। ReadWriteTimeout के लिए डिफ़ॉल्ट बहुत लंबा है।

+3

जानकारी का एक और tidbit: 'HttpWebRequest.ReadWriteTimeout' की स्थापना करके काम करता है अंतर्निहित 'नेटवर्कस्ट्रीम' की 'लिखेंटाइमआउट' और 'रीडटाइमआउट' गुण ('System.Net' को अलग करके सीखा)। –

+0

एक बात जो उल्लेखनीय है वह है कि 'टाइमआउट' में 'ReadWriteTimeout' शामिल है। यदि आपके पास 'टाइमआउट' <'ReadWriteTimeout' है, तो लंबे समय तक चलने का अनुरोध अभी भी समय-समय पर हो सकता है। मैंने पहली बार गलत समझा कि – dstj

+0

@dstj टाइमआउट = 100s का डिफ़ॉल्ट मान जबकि ReadWriteTimeout = 300s। तो डिफ़ॉल्ट रूप से टाइमआउट codewarrior

4

.Timeout = समय (लुकअप समय को छोड़कर) .ReadWriteTimeout = समय डेटा पढ़ने या लिखने की कोशिश कर रहा खर्च के बाद कनेक्शन

5

स्थापित कनेक्शन स्थापित करने का मेरा मानना ​​है कि आप @ से अपने जवाब के पहले भाग मिला कोशिश कर खर्च डोनाल लेफ्र्टी। वैसे भी एक त्वरित सारांश यहाँ है।

HttpWebRequest.Timeout - उस समय से पहले सर्वर को ग्राहक के अनुरोध को स्वीकार करना होगा। ध्यान दें कि इसमें DNS रिज़ॉल्यूशन समय शामिल नहीं है, जिसे ServicePointManager द्वारा प्रबंधित किया जाता है।

HttpWebRequest.ReadWriteTimeout - उस समय से पहले ग्राहक को सर्वर से प्रतिक्रिया का पूरा शरीर प्राप्त करना होता है। ध्यान दें कि सर्वर के अनुरोध को स्वीकार करने के बाद ही यह टाइमआउट शुरू होता है।

आपके दूसरे प्रश्न का उत्तर दो गुना है।

1. तुल्यकालिक अनुरोध:

TCP कनेक्शन समय समाप्ति पर बंद हो जाती हैं, हर कोई खुश है।

2।असीमित अनुरोध:

इन टाइमआउट का बिल्कुल कोई प्रभाव नहीं पड़ता है। यदि आपके पास टाइम-आउट सौंपने के लिए उचित तंत्र नहीं है, तो टीसीपी कनेक्शन खुले रहेंगे।

ठीक कारण नहीं है यही कारण है कि आप AsyncWaitHandle पर एक टाइमआउट पंजीकरण से अनुरोध निरस्त करें, के रूप में उदाहरण के लिए यहाँ में दिखाया गया है:

http://msdn.microsoft.com/library/21k58ta7.aspx

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