同じポート上のセルフホスティング Web サーバー (HTTPListener) を備えたセルフホスティング WCF。可能?
-
20-09-2019 - |
質問
私はアプリに取り組んでおり、それに Web インターフェイスを提供する必要があります。WCF を使用して Web インターフェイスのサービスを提供し、アプリ (IIS なし) の両方を自己ホストすることを考えていました。さて、これら 2 つが同じポートを使用していない場合、ブラウザは XSS について文句を言います...
これは可能でしょうか?これは良いアイデアですか?
編集いくつかの調査の後、私はそれを機能させることができました。
Web サービスのセルフホスト コードは次のとおりです。
var serviceHost = new ServiceHost(typeof(CalculatorService));
serviceHost.AddServiceEndpoint(typeof (ICalculator), new WSHttpBinding(), "http://localhost:8000/webservice");
serviceHost.Open();
Console.WriteLine("CalcService is running.");
Console.WriteLine("Press Enter to terminate the service.");
Console.ReadLine();
serviceHost.Close();
Web ホストのコードは次のとおりです。
var listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8000/webconsole/");
listener.Start();
Console.WriteLine("listening");
while(true)
{
HttpListenerContext context = listener.GetContext();
/* ... */
}
Webサービスが機能するには、次のことを行う必要がありました これ
解決
はい、うまくいきます。HTTP.SYS は、WCF が使用する HTTP 要素を抽象化し、すべてが異なるパス プレフィックスを使用している限り、任意の数のプロセスが同じポートを共有できるようにします。私も全く同じ理由でいつもこれをやっています。
ただし、これは IIS 5.1 の XP や VS Web サーバーでは機能しません。念のため試してみてください。これらは HTTP.SYS ベースではないため、ポートを排他的に取得することが期待されます。ただし、それ以外の場合 (2 つの WCF ホストを備えた XP を含む)、問題ありません。
他のヒント
素敵ですね、これは観ないといけませんね。他に何もうまくいかない場合は、2 つの別個のポートとして保持し、リバース プロキシを使用して WCF エンドポイントを整理することもできます。
所属していません StackOverflow