Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 不带HTTP.SYS的WCF_Windows_Wcf_Http_Http.sys - Fatal编程技术网

Windows 不带HTTP.SYS的WCF

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取决于操作

在WCF中使用HTTP绑定时,我需要授予自己能够绑定到该端口/路径的特殊权限。我理解这是因为WCF通过HTTP.sys驱动程序接受HTTP流量

在过去,我们可以创建一个新的套接字并绑定到任何未使用的旧端口,而无需成为管理员。NetTcpBinding仍然能够做到这一点


如果我不喜欢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 use
HostedHttpRequestAsyncResult
依赖于
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。所以一定有办法绕过它。