Wcf 如何使WebHttpBehavior for ClientAccessPolicy.xml停止窃取/劫持IIS';树根?

Wcf 如何使WebHttpBehavior for ClientAccessPolicy.xml停止窃取/劫持IIS';树根?,wcf,silverlight,webhttpbinding,clientaccesspolicy.xml,Wcf,Silverlight,Webhttpbinding,Clientaccesspolicy.xml,我使用的Silverlight应用程序具有net.tcp WCF通信。根据Silverlight net.tcp要求(tcp端口4502-4534等),我希望在ServiceHost中自托管ClientAccessPolicy.xml,并且策略文件必须位于根端口80上。我的问题是,当我的ServiceHost运行时,它会从IIS窃取端口80根,而我的网页都无法工作 创建策略终结点的代码如下所示: host.AddServiceEndpoint(typeof(IPolicyGetter), new

我使用的Silverlight应用程序具有net.tcp WCF通信。根据Silverlight net.tcp要求(tcp端口4502-4534等),我希望在ServiceHost中自托管ClientAccessPolicy.xml,并且策略文件必须位于根端口80上。我的问题是,当我的ServiceHost运行时,它会从IIS窃取端口80根,而我的网页都无法工作

创建策略终结点的代码如下所示:

host.AddServiceEndpoint(typeof(IPolicyGetter), new WebHttpBinding(), "http://localhost/").Behaviors.Add(new WebHttpBehavior());
当ServiceHost运行时,我可以看到我的
http://127.0.0.1/ClientAccessPolicy.xml
,但端口80上的所有网站都停止工作-我看到端点生成的标准WCF“Endpoint not found”网页。当我关闭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?

否,不能让两个进程在同一TCP/IP端口上侦听。如果您的ServiceHost正在侦听端口80,那么它将是唯一一个响应该端口上连接的进程


话虽如此,您可以让一个“主”进程侦听端口80并将连接重定向到“子”进程,但这超出了ServiceHost的范围和意图。

我认为端口80没有问题,因为子目录(而不是根目录)上具有WebHttpBinding和WebHttpBehavior的WCF服务将与IIS和平共存。