WCF没有HTTP.SYS

在WCF中使用HTTP绑定时,我需要授予自己特殊的权限才能绑定到该端口/path。 我知道这是因为WCF通过http.sys驱动程序接受HTTP通信。

在过去,我们可以新build一个套接字,并绑定到任何未使用的旧端口,而不是pipe理员。 NetTcpBinding仍然能够做到这一点。

如果我不关心http.sys,有没有办法告诉WCF不要使用它,而只是打开一个普通的旧套接字,而仍然使用HTTP绑定?

Solutions Collecting From Web of "WCF没有HTTP.SYS"

WCF基于HTTP的绑定依赖于HTTP API的托管包装Httplistner类。 HTTP API依赖于操作系统处理http请求的方式。 所以如果你使用的操作系统使用http.sys驱动程序(Windows 2003和更新),你是依赖于它。

编辑:

基于对Cassini的非常好的论证,我在Reflector中花了两个小时。 以下描述只是我的假设。 我还没有找到任何有关它的信息,所以也许我完全错了。

WCF内部包含一些名为HttpTransportManager抽象类,这个类是由内部类HostedHttpTransportManagerSharedHttpTransportManager (这个类也存在于HTTPS版本中)派生的。 前者不依赖于Httplistner ,后者则是。 前者是在ASP.NET管道中使用WCF时使用的 – System.ServiceModel.Activation程序集的内部类HttpmoduleeHttpHandler依赖于HostedHttpTransportManager使用HostedHttpTransportManagerHttpChannellistner创建时(自托管)使用HttpChannellistner

我的结论是,ASP.NET管道中托管的WCF服务不是直接依赖于http.sys,而是承载管道的IIS是。 这允许创建不依赖于http.sys的自定义Web服务器,但将能够承载ASP.NET和WCF。 我认为这就是卡西尼所做的。 自托管的WCF服务始终依赖于http.sys。

正如我上面写的,这只是我基于一些快速逆向工程的猜测。