2013-06-14 5 views
10

विफल रहता है मुझे इस समस्या का निवारण करने में एक भयानक समय है। मुझे एक आवेदन से लगातार दूसरे एप्लिकेशन में पुन: उत्पन्न करने का एक भयानक समय भी है।.NET 4.5 HttpClient PUT या SSL पर POST हमेशा

कुछ परिस्थितियों में, जिन्हें मैं पहचानने के लिए प्रतीत नहीं कर सकता, PUT और POSTHttpClient का उपयोग निम्नलिखित अपवादों में करते हुए कॉल करता है।

अनुरोध भेजते समय एक त्रुटि हुई।

आंतरिक अपवाद:
अंतर्निहित कनेक्शन बंद था: प्रेषण पर एक अनपेक्षित त्रुटि हुई।

आंतरिक अपवाद:
यह ऑपरेशन पूर्ण एसिंक्रोनस परिणाम ऑब्जेक्ट पर नहीं किया जा सकता है।

सबकुछ HTTP के साथ काम करता प्रतीत होता है, यह केवल HTTPS पर होता है।

प्रमाण पत्र मान्य हैं, लेकिन मैं ServicePointManager.ServerCertificateValidationCallback += (s, c, ch, es) => true;

मैं स्थापित करने client.DefaultRequestHeaders.ExpectContinue = false;

मैं कोशिश की है, क्या एक लाख, अन्य हेडर, प्रमाणीकरण से लेकर बातें की तरह लगता है की कोशिश की है की स्थापना की कोशिश की है, आदि

क्या किसी को पता है कि मैं और क्या देख सकता हूं, कोशिश कर सकता हूं, आदि?

कोड स्निपेट:

// this is my registration in my IoC container... 
var handler = new HttpClientHandler 
{ 
    UseDefaultCredentials = true, 
    Credentials = CredentialCache.DefaultNetworkCredentials, 
}; 

var client = HttpClientFactory.Create(handler); 
client.BaseAddress = new Uri(Properties.Settings.Default.BaseUrl); 
client.DefaultRequestHeaders.Add("X-CustomHeader", "value"); 

// _client is constructor injected into my class... 
var response = await _client.PutAsJsonAsync("api/resource/" + id, model).ConfigureAwait(false); 
response.EnsureSuccessStatusCode(); // <-- never executes... 

अद्यतन:

अगर मैं ConfigureAwait(false) दूर ले यह ठीक काम करता है।

नोट, यह एक WPF ऐप है, विशेष रूप से, यह एक विजुअल स्टूडियो एक्सटेंशन है। हालांकि, मैं ठीक उसी समस्या के साथ एक ASP.NET MVC 4 आवेदन की क्या ज़रूरत है, और कहा कि आवेदन बिल्कुल ConfigureAwait(false) फोन नहीं करता है ...

अद्यतन 2:

मैं शामिल करने के लिए कोड का टुकड़ा अद्यतन HttpClient कक्षा का तत्कालता। कोड स्निपेट में शामिल नहीं होने वाली एकमात्र चीज मॉडल प्रकार और घोषणा है। यह अप्रासंगिक होना चाहिए, क्योंकि यह एक जटिल प्रकार के साथ सभी ऑटो गुणों के साथ एक धारावाहिक वर्ग है।

अद्यतन 3:

अगर यह प्रासंगिक है मैं नहीं जानता, लेकिन मैं कुछ बातें जो मुझे अजीब लग पाया है।

HTTP/1:

जब ऊपर कोड, फ़िडलर में क्रियान्वित करने, मैं POST पर एक 401, 2 CONNECT की जो निम्न HTTP प्रतिक्रियाओं में परिणाम के बाद मिलता है।1 200 कनेक्शन स्थापित किया गया
कनेक्शन: करीब

अद्यतन 4:

मैं इस होने के लिए मेरी आईओसी पंजीकरण कोड बदल दिया है:

var handler = new HttpClientHandler 
{ 
    UseDefaultCredentials = true, 
    Credentials = CredentialCache.DefaultCredentials, 
}; 

var client = HttpClientFactory.Create(handler); 
client.BaseAddress = new Uri(Properties.Settings.Default.BaseUrl); 
client.DefaultRequestHeaders.Add("X-CustomHeader", "value"); 

और अब यह विफल रहता है, लेकिन जब मैं खोलने फिडलर और इसे यातायात को डिक्रिप्ट करने दें ... यह काम करता है!

अद्यतन 5:

मेरा मानना ​​है कि यह एक सर्वर समस्या है, या एक प्रमाणपत्र मुद्दा होना चाहिए। यहां से जांच करने के लिए कोई सुझाव बहुत सराहना की जाएगी। कर्ट मान्य हैं और एक विश्वसनीय सीए से जारी किए जाते हैं।

अद्यतन 6:

अधिक डिबगिंग और समस्या निवारण। ServicePointManagerCertificateValidationCallback से पहले अपवाद होता है।

+0

वास्तविक प्रेषण कोड का एक अंश दिखाएं। –

+0

जोड़ा गया कोड स्निपेट, लेकिन यह वास्तव में केवल मूल उपयोग है। कुछ भी आकर्षक नहीं। – Adam

+0

क्या आप अनुरोध पूरा होने से पहले '_client' का निपटान कर रहे हैं? क्या आप एक न्यूनतम repro पोस्ट कर सकते हैं? –

उत्तर

2

मैंने अभी एचटीपी क्लाइंट के साथ एक ही समस्या का निवारण किया है। यह पता चला कि मुझे एसएसएल हैंडशेक के दौरान एक एसएनआई चेतावनी मिल रही थी, जिसके कारण एचटीपी क्लाइंट को अनिश्चित काल तक बंद कर दिया गया। वायरशर्क/टीसीपीडम्प चलाने का प्रयास करें और देखें कि क्या आपको टीएलएसवी 1 अपरिचित नाम चेतावनी, या किसी अन्य प्रकार की हैंडशेक चेतावनी मिल रही है। HttpClient इन परीक्षणों के आधार पर इन्हें सही ढंग से संभालने के लिए प्रतीत नहीं होता है।

0

मुझे एक ही समस्या थी और मैंने इसे .NET Framework (4.5) के अंतिम अद्यतन को स्थापित करने का संकल्प किया।