मेरे पास एक वेब एप्लिकेशन (IIS में होस्ट किया गया) है जो एक विंडोज सेवा से बात करता है। Windows सेवा ASP.Net MVC वेब API (स्व-होस्टेड) का उपयोग कर रही है, और इसलिए JSON का उपयोग करके http से अधिक के साथ संचार किया जा सकता है। वेब एप्लिकेशन को प्रतिरूपण करने के लिए कॉन्फ़िगर किया गया है, यह विचार यह है कि उपयोगकर्ता जो वेब एप्लिकेशन के लिए अनुरोध करता है, वह उपयोगकर्ता होना चाहिए जो वेब एप्लिकेशन सेवा का अनुरोध करने के लिए उपयोग करता है। संरचना इस तरह दिखती है:
(लाल रंग में हाइलाइट किया गया उपयोगकर्ता नीचे के उदाहरणों में संदर्भित किया जा रहा है।)
वेब एप्लिकेशन विंडोज सेवा का अनुरोध करता है HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
यह विंडोज सेवा के लिए अनुरोध करता है, लेकिन सही ढंग से क्रेडेंशियल्स को पारित नहीं करता है (सेवा उपयोगकर्ता को रिपोर्ट करती है IIS APPPOOL\ASP.NET 4.0
)। यह वह नहीं है जो मैं होना चाहता हूं ।
अगर मैं उपर्युक्त कोड को WebClient
बदले में उपयोग करता हूं , तो उपयोगकर्ता के क्रेडेंशियल सही तरीके से पारित हो जाते हैं:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
उपरोक्त कोड के साथ, सेवा उपयोगकर्ता को उस उपयोगकर्ता के रूप में रिपोर्ट करती है जिसने वेब एप्लिकेशन के लिए अनुरोध किया था।
मैं उस HttpClient
कार्यान्वयन के साथ क्या गलत कर रहा हूं जिससे यह सही ढंग से क्रेडेंशियल्स पास नहीं कर रहा है (या यह बग के साथ है HttpClient
)?
इसका उपयोग करने का कारण HttpClient
यह है कि इसमें एक async API है जो Task
s के साथ अच्छी तरह से काम करता है , जबकि WebClient
's asyc API को इवेंट्स के साथ संभाला जाना चाहिए।
DownloadStringTaskAsync
में .Net 4.5 है, जिसका उपयोग async / प्रतीक्षा के साथ भी किया जा सकता है
HttpClient
पास कोई SetCredentials()
विधि नहीं है । क्या आप मुझे बता सकते हैं कि आपका क्या मतलब है?
new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, UseDefaultCredentials = true }
विंडोज-प्रमाणित उपयोगकर्ता द्वारा एक्सेस किए गए वेब सर्वर पर बनाने की कोशिश की , और वेब साइट ने उसके बाद एक और दूरस्थ संसाधन के लिए प्रमाणित किया (ध्वज सेट के बिना प्रमाणित नहीं होगा)।