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

Важно!

Настольное приложение Internet Explorer 11 будет снято с службы поддержки 15 июня 2022 г. (список того, что имеется в области, см. в faq). Те же приложения и сайты IE11, которые вы используете сегодня, могут открываться в Microsoft Edge режиме Internet Explorer. Подробнее см. здесь.

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

Оригинальная версия продукта:   Internet Explorer
Исходный номер КБ:   238425

Дополнительная информация

Так как IIS — это служба, у вас будет такой же набор проблем, как и при запуске WinInet в расширении интерфейса программы приложений internet Server (ISAPI) или в DLL com ActiveX, используемом ASP (ASP)-- как и при запуске WinInet в службе. Запуск WinInet в приложении IIS также имеет уникальный набор проблем.

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

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

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

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

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

Клиентская среда: человек, работающий с internet Explorer

  • Относительно небольшое число запросов
  • Запросы, сделанные относительно последовательно
  • Срок службы хост-приложения короткий (продолжительность сеанса браузера)

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

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

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

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

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

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