2014-12-10 12 views
5

का उपयोग करते समय मुझे System.Net.HttpWebRequest के साथ एक बहुत ही अजीब समस्या है, जो मुझे पागल कर रहा है: जब मैं इसे localhost पते से चलाता हूं, तो यह या तो बहुत धीमा है (लगभग 30 सेकंड) या, ज्यादातर मामलों में, यह पूरी तरह से बाहर हो जाता है। यह केवल उन अनुरोधों के साथ होता है जो localhost को लक्षित करते हैं, और केवल सी # कोड से।वेब अनुरोध विफल रहता है, लेकिन केवल स्थानीयहोस्ट के लिए और System.Net.HttpWebRequest

Concretely, एक उदाहरण के रूप में एक ASP.NET वेब API प्रोजेक्ट लेने, जब मैं इस कोड है:

[Test] 
public void TestRequest() 
{ 
    var request = WebRequest.Create("http://localhost:64497/api/values"); 
    WebResponse response = request.GetResponse(); 
} 

..it होगा ज्यादातर समय इस अपवाद के साथ विफल:

System.Net.WebException: रिमोट सर्वर से कनेक्ट करने में असमर्थ
----> System.Net.Sockets.SocketException: एक कनेक्शन प्रयास विफल हुआ क्योंकि कनेक्टेड पार्टी समय या स्थापित कनेक्शन विफल होने के बाद ठीक से प्रतिक्रिया नहीं दे सका इसलिये जुड़ा मेजबान 127.0.0.1:64497

प्रतिक्रिया करने के लिए नेट कोड का निरीक्षण करके नाकाम रही है, मैं WSAConnect API करने के लिए त्रुटि नीचे ट्रैक किए गए एक गैर शून्य मान लौट रहा है, लेकिन मैं नहीं देख सकते हैं कि इस बात का है बहुत मदद (हालांकि, इस एक 32bit एपीआई है, जबकि मैं एक 64 बिट सिस्टम पर चल रहा हूँ। वहाँ कुछ अजीब 32/64 बिट समस्या हो सकता है?)

जब मैं स्थानीय होस्ट अलावा किसी दूसरे पते के साथ उपरोक्त कोड को चलाने (माना http://www.google.com), तो यह सामान्य रूप से व्यवहार करता है और मुझे 1 सेकंड के आसपास प्रतिक्रिया समय मिलता है। इसके अलावा, जब मैं एक अलग क्लाइंट से उपरोक्त अनुरोध जमा करता हूं (मैंने क्रोम के Advanced REST Client का उपयोग किया), तो मुझे सामान्य व्यवहार मिलता है: प्रारंभिक संकलन के कारण पहले अनुरोध के लिए लगभग 5-8 सेकंड का देरी का समय, और बहुत कम प्रतिक्रिया समय (20-40 एमसीसी) सभी बाद के अनुरोधों के लिए।

इन निष्कर्षों को देखते हुए, यह मेरे लिए काफी स्पष्ट है कि समस्या कुछ है कि System.Net.HttpWebRequest वर्ग के कार्यान्वयन के लिए विशिष्ट है से आना चाहिए लगता है ...

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

अधिक जानकारी: मैं विन 8.1 64 बिट और वीएस 2013 एसपी 4 समर्थक चला रहा हूं। सिस्टम की HOST फ़ाइल अनमोडिफाइड है, यानी इसमें कोई प्रविष्टियां नहीं हैं।अशक्त करने के लिए

  • की स्थापना proxysettings स्पष्ट

    • व्यवस्थापक मोड
    • में वी.एस. चल रहा है सब फ़ायरवॉल और एंटीवायरस सॉफ़्टवेयर
    • आईआईएस एक्सप्रेस के बजाय IIS का उपयोग बंद करने से:

      चीजें मैं अब तक की कोशिश की है , प्रति कोड और प्रति कॉन्फ़िगरेशन दोनों

    • प्रति ProcessMonitor प्रति आईआईएस एक्सप्रेस प्रक्रिया का निरीक्षण - कोई परिणाम नहीं (जैसा कि मैंने कहा, मुझे पूरा यकीन है कि वेब सर्वर सीधे नहीं है 127.0.0.1

    मुझे समझ नहीं आता कि समस्या क्या है, और मैं वेब पर किसी भी प्रासंगिक जानकारी नहीं मिल सकता है इस समस्या को)

  • localhost बदलने में olved। मेरे पास कोई और विचार नहीं है जो मैं त्रुटि को ट्रैक करने का प्रयास कर सकता हूं। दूसरे शब्दों में: मैं इस पर पूरी तरह से अटक गया हूं, और यह प्रभावी रूप से मुझे स्थानीय रूप से होस्ट किए गए जाल के खिलाफ किसी भी एकीकरण परीक्षण लिखने से रोकता है। किसी भी मदद/संकेत/टिप की अत्यधिक सराहना की जाती है।

  • +1

    उस अन्य मुद्दे में कोई जवाब नहीं है ... एक, जैसा कि मैं इस मुद्दे पर भी अटक गया हूं :) – ahaaman

    उत्तर

    0

    बस इस भाग को जांचने के लिए: ".NET कोड का निरीक्षण करके, मैंने त्रुटि को डब्ल्यूएसएकनेक्ट एपीआई में एक गैर-शून्य मान लौटाते हुए त्रुटि को ट्रैक किया, लेकिन मुझे नहीं लगता कि यह बहुत मददगार है। (हालांकि , यह एक 32 बिट एपीआई है, जबकि मैं 64 बिट सिस्टम पर चल रहा हूं। क्या कुछ अजीब 32/64 बिट समस्या हो सकती है?) "

    सुनिश्चित करें कि आईआईएस में, एप्लिकेशन पूल के लिए, आपके पास 32-बिट है सक्षम (डिफ़ॉल्ट अक्षम है)।

    इसके अलावा, मैं बाध्यकारी ठीक से सेट है मान लेते हैं। (वह अंतिम भाग [बाध्यकारी] एक टिप्पणी माना जाता था, लेकिन मेरे पास प्रतिनिधि नहीं था - इसे हटा दिया गया था, स्पष्ट रूप से या होगा)

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