4

net.tcp WCF 通信を行う Silverlight アプリケーションを使用しています。ServiceHost 内で ClientAccessPolicy.xml を自己ホストしたいのですが、Silverlight net.tcp の要件 (TCP ポート 4502 ~ 4534 など) に従って、ポリシー ファイルはルートのポート 80 にある必要があります。私の問題は、ServiceHost が実行されているときに、IIS からポート 80 ルートを盗み、Web ページがまったく機能しないことです。

ポリシー エンドポイントを作成するコードは次のようになります。

host.AddServiceEndpoint(typeof(IPolicyGetter), new WebHttpBinding(), "http://localhost/").Behaviors.Add(new WebHttpBehavior());

ServiceHost が実行されている場合http://127.0.0.1/ClientAccessPolicy.xml、. ServiceHost をオフにすると、Web サイトは表示されますが、ClientAccessPolicy.xml は表示されません。

エンドポイント URI の完全なパスを使用してみました。

policyUri.Scheme = "http";
policyUri.Port = 80;
policyUri.Query = "ClientAccessPolicy.xml";
host.AddServiceEndpoint(typeof(IPolicyGetter), new WebHttpBinding(), policyUri.ToString()).Behaviors.Add(new WebHttpBehavior());

しかし、これは引数の例外をスローします。Silverlight はルート Web ディレクトリのポート 80 のみを参照するため、ポリシーをサブディレクトリまたは別のポートに移動しても機能しません。

明らかに、ClientAccessPolicy.xml を Web ルート ディレクトリにコピーして、ポリシー エンドポイントを無効にすることができます。エンドポイントをボタンダウンして、ClientAccessPolicy.xml への呼び出しのみをハイジャックし、IIS ポート 80 全体を盗まないようにする方法はありますか?

4

1 に答える 1

0

いいえ、2つのプロセスが同じTCP/IPポートでリッスンすることはできません。ServiceHostがポート80でリッスンしている場合、そのポートでの接続に応答するプロセスはServiceHostだけになります。

そうは言っても、「マスター」プロセスにポート80でリッスンさせ、接続を「子」プロセスにリダイレクトさせることができますが、これはServiceHostの範囲と意図を超えています。

于 2012-10-18T21:15:28.700 に答える