2010-12-09 110 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