हम एचटीपी क्लाइंट के लिए एक रैपर बना रहे हैं। चूंकि हम https://github.com/mspnp/performance-optimization से प्रदर्शन अनुकूलन मार्गदर्शन का पालन करने जा रहे हैं। हम एंटी-पैटर्न से बचना चाहते हैं - उस दस्तावेज़ में उल्लिखित अनुचित तत्कालता। मैंने स्थिर एचटीपी क्लाइंट का उपयोग करने के लिए अपनी टीम को यह मार्गदर्शन दिया। मुझे मिली फीडबैक थ्रेड-सुरक्षा पर है। प्रत्येक अनुरोध में एक शीर्षलेख होता है जिसमें उपयोगकर्ता दावा होता है। चूंकि मेरे पास स्थिर एचटीपी क्लाइंट है, क्या यह थ्रेड-सुरक्षित होगा? अगर हमारे पास एक ही समय में कोड (उदाहरण के लिए जीईटी) को मारने के कई अनुरोध हैं, तो क्या यह हेडर सेट करने के लिए दौड़ की स्थिति होगी? हमारे पास नीचे के रूप में कार्यान्वयन है।एएसपीनेट पर सुरक्षित स्टेटिक एचटीपी क्लाइंट थ्रेड HttpRequest
public class HttpClientHelper{
private static readonly HttpClient _HttpClient;
static HttpClientHelper() {
HttpClient = new HttpClient();
HttpClient.Timeout = TimeSpan.FromMinutes(SOME_CONFIG_VALUE);
}
public async Task<HttpResponseMessage> CallHttpClientPostAsync(string requestUri, HttpContent requestBody)
{
AddHttpRequestHeader(httpClient);
var response = await httpClient.PostAsync(requestUri, requestBody); //Potential thread synchronization issue???
return response;
}
public HttpResponseMessage CallHttpClientGet(string requestUri)
{
AddHttpRequestHeader(httpClient);
var response = httpClient.GetAsync(requestUri).Result; //Potential thread synchronization issue???
return response;
}
private void AddHttpRequestHeader(HttpClient client)
{
string HeaderName = "CorrelationId";
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(Properties.Settings.Default.HttpClientAuthHeaderScheme, GetTokenFromClaims()); //Race condition???
if (client.DefaultRequestHeaders.Contains(HeaderName))
client.DefaultRequestHeaders.Remove(HeaderName);
client.DefaultRequestHeaders.Add(HeaderName, Trace.CorrelationManager.ActivityId.ToString());
}
}
कोई कारण नहीं है कि 'CallHttpClientGet' async नहीं है? 'रेसल्ट' को कॉल करके आप थ्रेड को अवरुद्ध कर रहे हैं और संभावित डेडलॉक्स को आमंत्रित कर रहे हैं। –