服務或 IIS 應用程式不支援 WinInet

警告

已淘汰、不受支援的 Internet Explorer 11 傳統型應用程式已於特定 Windows 10 版本透過 Microsoft Edge 更新永久停用。 如需詳細資訊,請參閱 Internet Explorer 11 傳統型應用程式淘汰常見問題集 (英文)。

從服務或因特網資訊伺服器 (IIS) 應用程式執行時,不支援從 WinInet.dll) 導出的 Microsoft Win32 Internet Functions ( (服務) 。 本文討論如何在服務或 IIS 應用程式中使用 WinInet.dll。

原始產品版本: Ie
原始 KB 編號: 238425

其他相關資訊

因為 IIS 是服務,所以在因特網伺服器應用程式介面 (ISAPI) 擴充功能或 COM DLL 中執行 WinInet 時,您會有一組相同的問題,也就是 Active Server Pages (ASP) 所使用的 ACTIVEX DLL,就像在服務中執行 WinInet 一樣。 在 IIS 應用程式中執行 WinInet 也有一組獨特的問題。

在服務中執行 WinInet 的問題在於,WinInet 會使用登錄中的設定來取得 SSL 資訊、Proxy 資訊等等。 服務不會載入登錄 HKEY_CURRENT_USER 區,因此無法使用這項資訊。

警告

Microsoft 不支援在系統服務的內容中使用 WinInet API。

透過已安裝 Internet Explorer 5.0 的 SSL 從服務使用 WinInet API 時,會報告存取違規。

若要瞭解在伺服器環境中使用 WinInet 的唯一限制,必須瞭解 WinInet 的歷程記錄。 WinInet 是針對 Internet Explorer 所開發而開發。 事實上,若要使用較新版本的 WinInet,您必須載入最低限度的 Internet Explorer 安裝。 WinInet 也會公開 API,供其他想要存取因特網 (或內部網路) 資源的用戶端應用程式使用。 請務必辨識開發和測試 WinInet 的環境,以瞭解 DLL 的適當用途。 WinInet 是針對在客戶端環境中使用而開發的。 雖然在 ISAPI DLL 中執行時,它仍會做為用戶端,但在此情況下,它會在伺服器環境中執行。

客戶端環境:執行 Internet Explorer 的人員

  • 相對較少的要求數目
  • 相對連續提出的要求
  • 主應用程式存留期短 (瀏覽器會話)

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

  • 每秒要求數目很高
  • 同時提出要求的多個線程
  • 必須執行數周或數個月

慣用的解決方案是使用 WinHttp,其設計目的是要在服務環境中執行,而且因為它是伺服器端 HTTP 堆棧,所以不會繫結至 RFC 2616 對用戶端 HTTP 堆疊所載入的兩個連線限制。 此 API 集合與 WinInet 的使用方式類似,因此熟悉 WinInet 的人會發現很容易適應。

另一個解決方案是直接使用套接字,Platform SDK 包含示範如何透過 SSL 使用 WinSock 的範例。 您會在 SDK 的資料夾中 \Microsoft Platform SDK\Samples\Winbase\Security\Ssl 找到範例。

在伺服器環境中使用 WinInet 時要注意的另一個問題是 Internet Explorer 所載入的雙連線限制。

雖然可以在服務和伺服器環境中使用 WinInet,但不建議使用,也不受 Microsoft 支援。 WinInet 尚未在此設定中進行測試,且問題確實存在。