我正在使用具有net.tcp WCF通信的Silverlight應用程序。我想自己託管ServiceHost中的ClientAccessPolicy.xml,並且根據Silverlight net.tcp要求(TCP端口4502-4534等),策略文件必須位於根80端口上。我的問題是,當我的ServiceHost運行時,它從IIS中竊取80端口,並且我的網頁都沒有工作。如何讓ClientAccessPolicy.xml的WebHttpBehavior停止竊取/劫持IIS的根?
的代碼創建策略端點的樣子:
host.AddServiceEndpoint(typeof(IPolicyGetter), new WebHttpBinding(), "http://localhost/").Behaviors.Add(new WebHttpBehavior());
當ServiceHost的運行,然後我可以看到我http://127.0.0.1/ClientAccessPolicy.xml
,但對80端口停止工作,所有的網站 - 我看到標準的WCF「端點未找到「由Endpoint生成的網頁。當我關閉ServiceHost時,我可以看到我的網站,但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?
我不認爲這是端口80的問題,因爲WebHttpBinding和WebHttpBehavior在子目錄(而不是根目錄)上的WCF服務將與IIS和平共存。 – jman