質問

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 このクラスは、内部クラスによって導出されます HostedHttpTransportManagerSharedHttpTransportManager (これはHTTPSのバージョンにも存在します)。前者は依存していません HttpListener しかし、後者はそうです。前者は、WCFがASP.NETパイプラインでホストされているときに使用されます - 内部クラス HttpModuleHttpHandler System.serviceModel.activation Assemblyの使用から HostedHttpRequestAsyncResult に応じて HostedHttpTransportManager. 。後者はいつ使用されますか HttpChannelListener 作成されます(自己ホスティング)。

私の結論は、ASP.NETパイプラインでホストされているWCFサービスはhttp.sysに直接依存するのではなく、パイプラインをホストするIISに直接依存しているということです。これにより、http.sysに依存しないが、asp.netなどをホストできるカスタムWebサーバーの作成が可能になります。これがカッシーニがしていることだと思います。セルフホストWCFサービスは、常にhttp.sysに依存します。

上に書いたように、これはいくつかのクイックリバースエンジニアリングに基づいた私の推測だけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top