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 .
WebClientBunun 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.
HttpClientKimlik bilgilerini doğru bir şekilde geçirmemesine neden olan uygulamada ne yapıyorum (ya da ile ilgili bir hata HttpClientmıdır)?
Kullanmak istediğim nedeni HttpClient, Tasks ile iyi çalışan bir async API'sine sahipken, WebClient'syc API'sı olaylarla işlenmesi gerekiyor.
DownloadStringTaskAsyncda zaman uyumsuz / bekliyoruz kullanılabilir .Net 4.5, içinde
HttpClientbir 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).