2010-12-09 113 views
2

假設我正在運行一個網站(在IIS7上)偵聽端口8000上的請求。現在這個網站只包含靜態內容(即html文件)。所以當我瀏覽到URL http://localhost:8000時,瀏覽器顯示網站的默認html頁面。但是如果我還運行一個自主託管的WCF服務來監聽URL http://localhost:8000(此WCF服務不由IIS託管)上的請求,則瀏覽器將顯示有關WCF服務的數據:IIS7和WCF混淆

a)Don'對TCP/IP知之甚多,但據我所知,一次只有一個應用程序可以偵聽特定的IP和端口,但在這裏網站和WCF服務都可以監聽相同的IP地址和端口號。這怎麼可能?

b)當我在瀏覽器中輸入本地url(比如http://localhost:8000)時,瀏覽器是否不通過IIS請求頁面?如果是這樣,那爲什麼它會顯示WCF服務的詳細信息,而不是網站的默認頁面?畢竟,這個WCF服務甚至不被IIS託管。

謝謝

回答

2

的確,通常,只有一個進程可以偵聽特定的套接字。但是,在Windows中完成了工作,專門爲HTTP偵聽器提供支持,特別是在IIS 6.0中引入了HTTP.SYS

基本上,這是內核實際監聽HTTP請求,然後連接被路由到用戶域中的多個偵聽器進程之一。

用於自託管的WCF HTTP偵聽器也依賴於HTTP.sys,因此如果需要(或跨多個自託管的WCF服務),它們可以與IIS共享端口。

+0

A - 但爲什麼Http.Sys將請求傳遞給WCF服務而不是IIS? B - 即使是「本地」瀏覽器(因此和IIS一樣駐留在同一臺機器上)並不直接「聯繫」IIS,而是通過Http.sys間接地「聯繫」 – user437291 2010-12-09 22:14:55