4

我正在使用具有 net.tcp WCF 通信的 Silverlight 应用程序。我想在 ServiceHost 中自行托管 ClientAccessPolicy.xml,并且根据 Silverlight net.tcp 要求(TCP 端口 4502-4534 等),策略文件必须位于根端口 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“找不到端点”网页。当我关闭 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?

4

1 回答 1

0

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

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

于 2012-10-18T21:15:28.700 回答