服务或 IIS 应用程序中不支持 WinInet

警告

已停用、不受支持的 Internet Explorer 11 桌面应用程序在某些版本的 Windows 10 上已通过 Microsoft Edge 更新永久禁用。 有关详细信息,请参阅 Internet Explorer 11 桌面应用停用常见问题解答

从服务或 Internet 信息服务器 (IIS) 应用程序运行时,不支持从 WinInet.dll) 导出的 Microsoft Win32 Internet Functions ( (服务) 。 本文讨论在服务或 IIS 应用程序中使用 WinInet.dll。

原始产品版本: Ie
原始 KB 编号: 238425

更多信息

由于 IIS 是一项服务,因此在 Internet Server 应用程序程序接口 (ISAPI) 扩展中运行 WinInet 时,或者在 Active Server Pages (ASP) 使用的 COM DLL 中运行 WinInet 时,将遇到相同的一组问题。 在 IIS 应用程序中运行 WinInet 也有一组独特的问题。

在服务中运行 WinInet 的问题在于 WinInet 使用注册表中的设置获取 SSL 信息、代理信息等。 服务不会加载 HKEY_CURRENT_USER 注册表配置单元,因此此信息不可用。

警告

Microsoft 不支持在系统服务的上下文中使用 WinInet API。

WinInet API 通过安装了 Internet Explorer 5.0 的 SSL 从服务使用时报告访问冲突。

为了了解在服务器环境中使用 WinInet 的独特限制,有必要了解 WinInet 的历史记录。 WinInet 是由 Internet Explorer 开发的。 事实上,若要使用更高版本的 WinInet,必须加载 Internet Explorer 的最小安装。 WinInet 还公开 API,供希望访问 Internet (或 Intranet) 上的资源的其他客户端应用程序使用。 必须识别开发并测试 WinInet 的环境,以便了解 DLL 的适当用途。 WinInet 是在客户端环境中开发的。 尽管它在 ISAPI DLL 中运行时仍充当客户端,但在这种情况下,它在服务器环境中运行。

客户端环境:运行 Internet Explorer 的人员

  • 相对较少的请求数
  • 相对连续的请求
  • 主机应用程序生存期短 (浏览器会话) 的长度

服务器环境:Web 服务器 (,例如 https://www.microsoft.com)

  • 每秒请求数高
  • 多个线程并发发出请求
  • 必须运行数周或数月

首选解决方案是使用 WinHttp,它设计为在服务环境中运行,并且因为它是服务器端 HTTP 堆栈,因此它不会绑定到 RFC 2616 对客户端 HTTP 堆栈施加的两个连接限制。 此 API 集在用法上与 WinInet 类似,因此熟悉 WinInet 的人会发现它很容易适应。

另一种解决方案是直接使用套接字平台 SDK 包含一个示例,演示如何通过 SSL 使用 WinSock。 你将在 \Microsoft Platform SDK\Samples\Winbase\Security\Ssl SDK 的 文件夹中找到一个示例。

在服务器环境中使用 WinInet 时要注意的另一个问题是 Internet Explorer 施加的双连接限制。

虽然可以在服务和服务器环境中使用 WinInet,但 Microsoft 不建议也不支持 WinInet。 WinInet 尚未在此配置中进行测试,并且确实存在问题。