IIS ASP.NET WebApi डेडलॉक जब एक ही सर्वर का अनुरोध करते हैं



asp.net-web-api2 deadlock (1)

सिर्फ एक अवलोकन: आप हर नियंत्रक के लिए एक स्थिर सदस्य के रूप में एचटीटीपी क्लाइंट का प्रयोग कर रहे हैं और इस एचटीटीपी क्लाइंट के अनुसार धागा-सुरक्षित होने की गारंटी नहीं है

हम एक ही आईआईएस सर्वर पर असंबद्ध ASP.NET WebApis के साथ काम करते समय कुछ डेडलॉक अनुभव कर रहे हैं। हम यह जानना चाहते हैं कि किसी एक तरह से यह एक अपेक्षित व्यवहार है, एक ही सर्वर पर समान API और एक ही आवेदन पूल की मेजबानी के कारण, क्योंकि हमने वेबएपी को एक अलग पूल में ले जाकर इस मुद्दे से बचने में कामयाब रहे हैं; या अगर हमारे कोड में कुछ गलत है

उत्पादन के लिए, हम शायद विभिन्न सर्वर या पूल पर एपीआई की मेजबानी करेंगे, लेकिन फिर भी हम यह समझना चाहते हैं कि ऐसा क्यों हो रहा है हमारी मुख्य चिंता यह है कि, अगर यह हमारा दोषपूर्ण कोड है, तो समस्या को बड़े पैमाने पर पुन: प्रस्तुत किया जा सकता है, भले ही होस्टिंग सेटअप सही हो।

हमने डेडलॉक को पुन: उत्पन्न करने के लिए थोड़ा हल किया है, जिसे GitHub में होस्ट किया गया है

प्रजनन चरणों का अनुसरण किया गया है:

  1. WebClient समानांतर WebApi1 में एकाधिक HTTP अनुरोध निष्पादित करता है।
  2. WebApi1 WebApi2 को एक HTTP अनुरोध निष्पादित करता है
  3. WebApi2 WebApi3 को एक HTTP अनुरोध निष्पादित करता है।
  4. WebApi3 बस एक स्ट्रिंग देता है

अपेक्षित व्यवहार होगा कि सभी अनुरोध अंततः हल हो जाएंगे।

वास्तविक व्यवहार यह है कि, कुछ अनुरोध पूरा हो जाएंगे, जबकि कुछ अन्य विफल हो जाएंगे, क्योंकि TaskCancelledException कारण अनुरोधों के कारण समय समाप्त हो रहा है।

एक ही लेख जिसे मैं उसी मुद्दे का उल्लेख करने में सक्षम था, वह 2014 से है: " उसी सर्वर पर सर्वर XMLHTTP या WinHTTP अनुरोध भेजें नहीं ", मुझे विश्वास है कि यह समस्या हम अनुभव कर रहे हैं, हम इसकी पुष्टि कैसे कर सकते हैं ?

प्रसंग

हमें काम करने के लिए कंपनी को कई आंतरिक एपीआई के लिए एक केंद्रीकृत प्रमाणीकरण सर्वर बनाने के लिए कार्य सौंपा गया है। हम संदर्भ टोकन के साथ IdentityServer3 का उपयोग कर रहे हैं, इसलिए जब कुछ एपीआई संदर्भ टोकन का उपयोग करते हुए एक दूसरे एपीआई का अनुरोध करता है, दूसरा एपीआई टोकन सत्यापन के लिए प्रमाणीकरण सर्वर का अनुरोध करेगा जो समस्या को पुन: प्रस्तुत करता है।

मैंने पहचान सर्वर टैग को जोड़ लिया है, क्योंकि यह एकाधिक एपीआई संचार करते समय और संदर्भ टोकनों का उपयोग करते समय एक सामान्य समस्या हो सकती है। GitHub पर नमूना





identityserver3