[英]WCF without HTTP.SYS
在WCF中使用HTTP綁定時,我需要授予自己特殊權限才能綁定到該端口/路徑。 我理解這是因為WCF通過http.sys驅動程序接受HTTP流量。
在過去,我們可以新建一個套接字並綁定到任何未使用的舊端口,而不是管理員。 NetTcpBinding仍然能夠做到這一點。
如果我不關心http.sys,有沒有辦法告訴WCF不要使用它,而只是在仍然使用HTTP綁定時打開一個普通的舊套接字?
基於WCF HTTP的綁定依賴於HttpListener
類,它是圍繞HTTP API的托管包裝器。 HTTP API取決於操作系統處理http請求的方式。 因此,如果您使用使用http.sys驅動程序(Windows 2003和更高版本)的操作系統,則依賴於它。
編輯:
根據關於卡西尼的非常好的爭論,我在Reflector花了兩個小時。 以下描述僅是我的假設。 我還沒有找到任何關於它的信息,所以也許我完全錯了。
WCF內部包含一些名為HttpTransportManager
抽象類,該類由內部類HostedHttpTransportManager
和SharedHttpTransportManager
(這一個也存在於HTTPS的版本中)。 前一個不依賴於HttpListener
,而后一個是。 內部類-當WCF托管在ASP.NET管道前者用於HttpModule
和HttpHandler
從System.ServiceModel.Activation組件中使用HostedHttpRequestAsyncResult
依賴HostedHttpTransportManager
。 在創建HttpChannelListener
時使用HttpChannelListener
(自托管)。
我的結論是,在ASP.NET管道中托管的WCF服務並不直接依賴於http.sys,而是托管管道的IIS。 這允許創建自定義Web服務器,該服務器不依賴於http.sys,但能夠托管ASP.NET等WCF。 我認為這就是卡西尼所做的。 自托管WCF服務始終依賴於http.sys。
正如我上面所寫,這只是我基於一些快速逆向工程的猜測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.