2012-10-18 53 views
4

我正在使用具有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?

回答

0

不,您不能讓兩個進程在相同的TCP/IP端口上進行偵聽。如果您的ServiceHost在端口80上進行偵聽,那麼它將成爲響應該端口連接的唯一進程。儘管如此,您可以在端口80上監聽「主」進程並將連接重定向到「子進程」,但這超出了ServiceHost的範圍和意圖。

+0

我不認爲這是端口80的問題,因爲WebHttpBinding和WebHttpBehavior在子目錄(而不是根目錄)上的WCF服務將與IIS和平共存。 – jman