У меня есть веб-приложение (размещенное в IIS), которое ведет переговоры с службой Windows. Служба Windows использует ASP.Net MVC Web API (самообслуживание) и поэтому может передаваться через http с помощью JSON. Веб-приложение настроено на олицетворение, идея заключается в том, что пользователь, который делает запрос к веб-приложению, должен быть пользователем, который веб-приложение использует для выполнения запроса к службе. Структура выглядит следующим образом:
(Пользователь, выделенный красным цветом, относится к пользователю, указанному в приведенных ниже примерах.)
Веб-приложение делает запросы к службе Windows с помощью HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Это делает запрос к службе Windows, но не передает учетные данные правильно (служба сообщает пользователю как IIS APPPOOL\ASP.NET 4.0
). Это не то, что я хочу сделать.
Если я изменю приведенный выше код, чтобы использовать WebClient
, учетные данные пользователя передаются правильно:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
В приведенном выше коде служба сообщает пользователю как пользователя, который сделал запрос в веб-приложение.
Что я делаю неправильно с реализацией HttpClient
, которая заставляет его не передавать учетные данные правильно (или это ошибка с HttpClient
)?
Причина, по которой я хочу использовать HttpClient
, заключается в том, что у нее есть асинхронный API, который хорошо работает с Task
s, тогда как API-интерфейс WebClient
asyc должен обрабатываться событиями.