Я создал функцию, которая загружает серию отчетов с моего веб-сайта (NET веб-формы, старое приложение), сохраняет их в виде файлов. html во временную папку, архивирует их и возвращает архив пользователю. Приложение использует windows аутентификацию, и мне удалось передать учетные данные текущего пользователя в запросе, включив
Credentials = CredentialCache.DefaultCredentials
Все работает без проблем в моей среде разработки (как в IIS Express, так и в IIS), но на рабочем сервере (Windows server 2008 R2, IIS 7.5) он работает только в том случае, если я ограничу цикл только одной итерацией. Похоже, что основное соединение WebClient остается открытым, и сервер отказывается открывать другое соединение в следующем цикле. Я получаю сообщение об ошибке:
Запрос был прерван: не удалось создать безопасный канал SSL / TLS.
и, включив трассировку WCF, я могу сузить проблему до ошибка «401 несанкционированный».
Вот важная часть моей функции:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls |
SecurityProtocolType.Tls12 |
SecurityProtocolType.Tls11;
foreach (var project in list.Take(1)) //fails if I try list.Take(2) or more
{
using (WebClient client = new WebClient
{
Credentials = CredentialCache.DefaultCredentials
})
{
UriBuilder address = new UriBuilder
{
Scheme = Request.Url.Scheme,
Host = Request.Url.Host,
Port = Request.Url.Port,
Path = "/ERP_ProjectPrint.aspx",
Query = string.Format("bpId={0}&bpVid={1}", project.Id, project.VersionId)
};
string fileName = project.VersionProtocol + ".html";
client.DownloadFile(address.Uri.ToString(), tempFilePath + fileName);
}
}
Любой совет о настройках IIS, который можно настроить для решения этой проблемы?