Bir Windows hizmetiyle konuşan bir web uygulamam (IIS'de barındırılıyor) var. Windows hizmeti ASP.Net MVC Web API'sini (kendi kendine barındırılan) kullanıyor ve bu nedenle http üzerinden JSON kullanılarak iletilebilir. Web uygulaması, kimliğe bürünme yapmak üzere yapılandırılmıştır; bu, web uygulamasına istekte bulunan kullanıcının, web uygulamasının hizmete istekte bulunmak için kullandığı kullanıcı olması gerektiği fikridir. Yapı şöyle görünür:
(Kırmızı ile vurgulanan kullanıcı, aşağıdaki örneklerde belirtilmiş olan kullanıcıdır.)
Web uygulaması, Windows hizmetinden aşağıdakileri kullanarak istekte bulunur HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Bu, Windows hizmetine istekte bulunur, ancak kimlik bilgilerini doğru bir şekilde iletmez (hizmet kullanıcıyı bildirir IIS APPPOOL\ASP.NET 4.0
). Olmak istediğim bu değil .
WebClient
Bunun yerine yukarıdaki kodu değiştirmek, kullanıcının kimlik bilgileri doğru geçirilir:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
Yukarıdaki kodla, hizmet kullanıcıyı web uygulamasına istekte bulunan kullanıcı olarak bildirir.
HttpClient
Kimlik bilgilerini doğru bir şekilde geçirmemesine neden olan uygulamada ne yapıyorum (ya da ile ilgili bir hata HttpClient
mıdır)?
Kullanmak istediğim nedeni HttpClient
, Task
s ile iyi çalışan bir async API'sine sahipken, WebClient
'syc API'sı olaylarla işlenmesi gerekiyor.
DownloadStringTaskAsync
da zaman uyumsuz / bekliyoruz kullanılabilir .Net 4.5, içinde
HttpClient
bir SetCredentials()
yöntemi yok. Beni ne demek istediğine işaret edebilir misin?
new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, UseDefaultCredentials = true }
Windows kimliği doğrulanmış bir kullanıcı tarafından erişilen bir web sunucusunda oluşturmayı denedim ve web sitesi bundan sonra başka bir uzak kaynak için kimlik doğrulaması yaptı (bayrak ayarlanmadan kimlik doğrulaması yapılmaz).