Windows 不带HTTP.SYS的WCF
在WCF中使用HTTP绑定时,我需要授予自己能够绑定到该端口/路径的特殊权限。我理解这是因为WCF通过HTTP.sys驱动程序接受HTTP流量 在过去,我们可以创建一个新的套接字并绑定到任何未使用的旧端口,而无需成为管理员。NetTcpBinding仍然能够做到这一点Windows 不带HTTP.SYS的WCF,windows,wcf,http,http.sys,Windows,Wcf,Http,Http.sys,在WCF中使用HTTP绑定时,我需要授予自己能够绑定到该端口/路径的特殊权限。我理解这是因为WCF通过HTTP.sys驱动程序接受HTTP流量 在过去,我们可以创建一个新的套接字并绑定到任何未使用的旧端口,而无需成为管理员。NetTcpBinding仍然能够做到这一点 如果我不喜欢http.sys,有没有办法告诉WCF不要使用它,而是在仍然使用http绑定的情况下打开一个常规的旧套接字?WCF基于http的绑定依赖于围绕http API管理的HttpListener类。HTTP API取决于操作
如果我不喜欢http.sys,有没有办法告诉WCF不要使用它,而是在仍然使用http绑定的情况下打开一个常规的旧套接字?WCF基于http的绑定依赖于围绕http API管理的
HttpListener
类。HTTP API取决于操作系统处理HTTP请求的方式。所以,如果您使用的操作系统使用http.sys驱动程序(Windows 2003和更新版本),您将依赖它
编辑:
基于对卡西尼号的充分论证,我在反射器里呆了两个小时。下面的描述只是我的假设。我没有找到任何关于它的信息,所以可能我完全错了
WCF内部包含一些名为HttpTransportManager
的抽象类。该类由内部类HostedHttpTransportManager
和SharedHttpTransportManager
派生(该类在HTTPS版本中也存在)。前者不依赖于HttpListener
,但后者是。前者在WCF托管在ASP.NET管道中时使用-内部类HttpModule
和HttpHandler
来自System.ServiceModel.Activation assembly useHostedHttpRequestAsyncResult
依赖于HostedHttTransportManager
。后者在创建HttpChannelListener
时使用(自托管)
我的结论是,托管在ASP.NET管道中的WCF服务并不是直接依赖于http.sys,而是托管管道的IIS。这允许创建自定义web服务器,该服务器不依赖于http.sys,但能够承载ASP.NET和WCF。我想这就是卡西尼号所做的。自托管WCF服务始终依赖于http.sys
正如我在上面所写的,这只是基于快速逆向工程的猜测。VS中的Visual Web服务器(Cassini)以非管理员身份运行,可以侦听HTTP请求,甚至可以提供基本的HTTPBinding WCF服务。其他web服务器也不需要依赖HTTP.SYS。所以一定有办法绕过它。