WinInet не поддерживается в службе или приложении IIS

Предупреждение

Устаревшее и не поддерживаемое классическое приложение Internet Explorer 11 было окончательно отключено путем обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы о прекращении поддержки программы для настольных компьютеров Internet Explorer 11.

Интернет-функции Microsoft Win32 (экспортированные из WinInet.dll) не поддерживаются при запуске из службы или приложения IIS (также службы). В этой статье рассматривается использование WinInet.dll в службе или в приложениях IIS.

Исходная версия продукта: Интернет-Обозреватель
Исходный номер базы знаний: 238425

Дополнительные сведения

Так как СЛУЖБЫ IIS являются службой, у вас будет тот же набор проблем, что и при выполнении WinInet в расширении ISAPI или библиотеке DLL-библиотеки COM-ActiveX, используемой active server Pages (ASP) как при запуске WinInet в службе. Запуск WinInet в приложении IIS также имеет уникальный набор проблем.

Проблема с запуском WinInet в службе заключается в том, что WinInet использует параметры из реестра для получения сведений о SSL, сведений о прокси-сервере и многого другого. Службы не загружают HKEY_CURRENT_USER куст реестра, поэтому эти сведения недоступны.

Предупреждение

Корпорация Майкрософт не поддерживает использование API WinInet в контексте системной службы.

API WinInet сообщают о нарушениях доступа при использовании из службы по протоколу SSL с установленным Интернетом Обозреватель 5.0.

Чтобы понять ограничения, уникальные для использования WinInet в серверной среде, необходимо разобраться в истории WinInet. WinInet был разработан для использования интернет-Обозреватель. Фактически, чтобы использовать более поздние версии WinInet, необходимо загрузить минимальную установку Интернет-Обозреватель. WinInet также предоставляет API для использования другими клиентскими приложениями, которые хотят получить доступ к ресурсам в Интернете (или интрасети). Важно распознавать среду, в которой был разработан и протестирован WinInet, чтобы понять, как правильно использовать библиотеку DLL. WinInet был разработан для использования в клиентской среде. Хотя он по-прежнему выступает в качестве клиента при выполнении в библиотеке DLL ISAPI, в данном случае он выполняется в серверной среде.

Клиентская среда: пользователь, работающий в Интернете Обозреватель

  • Относительно небольшое число запросов
  • Запросы выполняются относительно последовательно
  • Время существования ведущего приложения короткое (продолжительность сеанса браузера)

Серверная среда: веб-сервер (например, https://www.microsoft.com)

  • Большое количество запросов в секунду
  • Несколько потоков, выполняющих запросы одновременно
  • Должен работать в течение нескольких недель или месяцев

Предпочтительным решением является использование WinHttp, который предназначен для запуска в среде службы, и поскольку это стек HTTP на стороне сервера, он не привязан к двум ограничениям на подключение, налагаемым RFC 2616, что клиентские стеки HTTP. Этот набор API аналогичен использованию WinInet, поэтому знакомым с WinInet будет легко адаптироваться.

Другое решение — использовать сокеты напрямую. Пакет SDK для платформы содержит пример, демонстрирующий использование WinSock по протоколу SSL. Вы найдете пример в папке \Microsoft Platform SDK\Samples\Winbase\Security\Ssl пакета SDK.

Еще одной проблемой, о которой следует знать при использовании WinInet в серверной среде, является ограничение на два подключения, установленное Интернетом Обозреватель.

Хотя WinInet можно использовать в службе и в серверной среде, она не рекомендуется и не поддерживается корпорацией Майкрософт. WinInet не был протестирован в этой конфигурации, и проблемы существуют.