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 全体を盗まないようにする方法はありますか?