The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何關閉 IIS 的 Socket Pooling 功能

可能很多人沒聽過何謂 Socket Pooling,其實就是在 IIS 裡的 Service 預設會將本機所有的 IP 全部綁定(Binding)起來佔住,即便你在 IIS 裡特別明確指定 IP:Port 給站台使用,其他的程式或服務也不能使用被佔住的 Port。

如下圖,在 IIS 的站台內容的 "IP 位址(I):" 欄位預設的值是 "(全未指定)",你可以透過 "進階(D)" 按鈕指定本機其他的 IP 位址:

設定 IIS 網站站台的 IP 綁定位址
圖1: 設定 IIS 網站站台的 IP 綁定位址

舉例來說,你的主機有兩個 IP 位址,你打算其中一個 IP 的 80 Port 跑 IIS,而另一個 IP 的 80 Port 跑 Apache for Win32,你可能會想說一個 IP 給一個用沒問題,但卻一直都跑不起來!在不做任何修改的情況下 Apache for Win32 與 IIS 是無法同時運作的,除非你先將 IIS 關閉,再將 Apache 先啟動,再將 IIS 啟動,但重開機後 Apache 就又會無法自動跑起來!同樣的,在 IIS 中其他的服務也都一樣有 Socket Pooling 的問題,例如說你想安裝不同的 FTP Server 在你的主機上,且同時使用 Port 21。

如果要解決這個問題,分別在 IIS 5 與 IIS 6 有不同的解法,請參考以下說明:

  1. IIS 5

    How to Disable Socket Pooling
    http://support.microsoft.com/kb/238131/en-us
     
  2. IIS 6

    Setting metabase property DisableSocketPooling has no effect
    http://support.microsoft.com/kb/813368/EN-US/

  3. IIS 7

    IIS binds to all IP addresses on a server when you install IIS 7.0 on Windows Server 2008
    http://support.microsoft.com/kb/954874/en-us