IIS7和WCF混淆

IIS7和WCF混淆,wcf,iis-7,Wcf,Iis 7,假设我正在运行一个网站(在IIS7上),监听端口8000上的请求。现在这个网站只包含静态内容(即html文件)。所以当我浏览到URL时,浏览器会显示网站的默认html页面。但如果我同时运行一个自托管WCF服务,侦听URL:8000上的请求(此WCF服务不由IIS托管),则浏览器将显示有关WCF服务的数据: a) 我不太了解TCP/IP,但据我所知,一次只能有一个应用程序可以监听特定的IP和端口,但在这里,网站和WCF服务都可以监听相同的IP地址和端口号。这怎么可能 b) 当我在浏览器中输入一个本

假设我正在运行一个网站(在IIS7上),监听端口8000上的请求。现在这个网站只包含静态内容(即html文件)。所以当我浏览到URL时,浏览器会显示网站的默认html页面。但如果我同时运行一个自托管WCF服务,侦听URL:8000上的请求(此WCF服务不由IIS托管),则浏览器将显示有关WCF服务的数据:

a) 我不太了解TCP/IP,但据我所知,一次只能有一个应用程序可以监听特定的IP和端口,但在这里,网站和WCF服务都可以监听相同的IP地址和端口号。这怎么可能

b) 当我在浏览器中输入一个本地url时,浏览器是否会通过IIS请求页面?如果是这样,那么为什么它会显示WCF服务的详细信息而不是网站的默认页面?毕竟,这个WCF服务甚至不是由IIS托管的


谢谢

正常情况下,只有一个进程可以侦听特定套接字。但是,在Windows中专门为HTTP侦听器提供了支持,特别是在IIS 6.0中引入了

基本上,内核会监听HTTP请求,然后将连接路由到user land中的多个侦听器进程之一


用于自托管的WCF HTTP侦听器也依赖于HTTP.sys,因此它们可以在需要时(或跨多个自托管WCF服务)与IIS共享端口。

A-但为什么HTTP.sys向WCF服务而不是IIS发送请求?B-因此,即使是“本地”浏览器(因此与IIS驻留在同一台机器上)也不会直接“联系”IIS,而是通过Http.sys间接联系?没有人直接联系IIS;应用程序(本地或非本地)也不会选择与谁联系。侦听套接字本身由windows内核代表已在HTTP.SYS中注册的任何进程进行监视。然后它将查看HTTP请求中指定的路径,并决定将请求路由到何处(哪个侦听进程)。我应该补充的是,当前问题的一部分是WCF和IIS使用相同的基址,这使得很难决定谁应该处理请求。但是,您可以在请求中使用路径来确定它(例如,在http://*:8000/path/而不是http://*:8000/注册您的自托管WCF进程)