代码之家  ›  专栏  ›  技术社区  ›  Paul Stovell

不带http.sys的wcf

  •  20
  • Paul Stovell  · 技术社区  · 15 年前

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

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

    如果我不关心http.sys,有没有一种方法可以告诉wcf不要使用它,而是在仍然使用http绑定的情况下打开一个常规的旧套接字?

    1 回复  |  直到 10 年前
        1
  •  15
  •   Ladislav Mrnka    15 年前

    基于WCF HTTP的绑定依赖于 HttpListener 类,它是围绕HTTP API的托管包装。HTTP API依赖于操作系统处理HTTP请求的方式。因此,如果您使用的操作系统使用http.sys驱动程序(Windows2003和更新版本),那么您就依赖于它。

    编辑:

    基于对卡西尼号的充分论证,我在反射镜上呆了两个小时。下面的描述只是我的假设。我没有找到任何关于它的信息,所以可能我完全错了。

    wcf内部包含一些名为 HttpTransportManager 这个类是由内部类派生的 HostedHttpTransportManager SharedHttpTransportManager (此版本也存在于https版本中)。前者不依赖于 霍特普林斯特 但后者是。前者在WCF托管在ASP.NET管道-内部类中时使用 HttpModule HttpHandler 从System.ServiceModel.Activation程序集使用 HostedHttpRequestAsyncResult 依赖于 hostedhttptransportmanager酒店 . 后一个用于 HttpChannelListener 创建(自托管)。

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

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

    推荐文章