質問
WCFでHTTPバインディングを使用する場合、そのポート/パスにバインドできるように、特別な許可を自分に付与する必要があります。これは、WCFがHTTPトラフィックを介して受け入れているためだと思います。 http.sys 運転者。
昔は、ソケットを新しくして、使用されていない古いポートにバインドすることができました。管理者ではありませんでした。 nettcpbindingはまだこれを行うことができます。
http.sysを気にしない場合、WCFに使用しないように指示する方法はありますか?
解決
WCF HTTPベースのバインディングは依存します HttpListener
HTTP API周辺のラッパーを管理するクラス。 HTTP APIは、操作システムプロセスHTTP要求の方法に依存しています。したがって、HTTP.SYSドライバー(Windows 2003以降)を使用するOperation Systemを使用する場合、それに依存します。
編集:
Cassiniについての非常に良い議論に基づいて、私は2時間をReflectorで過ごしました。次の説明は私の仮定だけです。私はそれについての情報を見つけていないので、多分私は完全に間違っています。
WCFには内部的には、呼ばれるいくつかの抽象クラスが含まれています HttpTransportManager
このクラスは、内部クラスによって導出されます HostedHttpTransportManager
と SharedHttpTransportManager
(これはHTTPSのバージョンにも存在します)。前者は依存していません HttpListener
しかし、後者はそうです。前者は、WCFがASP.NETパイプラインでホストされているときに使用されます - 内部クラス HttpModule
と HttpHandler
System.serviceModel.activation Assemblyの使用から HostedHttpRequestAsyncResult
に応じて HostedHttpTransportManager
. 。後者はいつ使用されますか HttpChannelListener
作成されます(自己ホスティング)。
私の結論は、ASP.NETパイプラインでホストされているWCFサービスはhttp.sysに直接依存するのではなく、パイプラインをホストするIISに直接依存しているということです。これにより、http.sysに依存しないが、asp.netなどをホストできるカスタムWebサーバーの作成が可能になります。これがカッシーニがしていることだと思います。セルフホストWCFサービスは、常にhttp.sysに依存します。
上に書いたように、これはいくつかのクイックリバースエンジニアリングに基づいた私の推測だけです。