Silverlight 5 打开套接字访问被拒绝

Silverlight 5 Opening Socket AccessDenied

我有一个 Silverlight 5 应用程序尝试建立到服务器的套接字连接,如下所示:

var targetEndpoint = new DnsEndPoint("subdomain.maindomain.com", 443);
var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var socketAsyncEventArgs = new SocketAsyncEventArgs {RemoteEndPoint = targetEndpoint};
socketAsyncEventArgs.Completed += AsyncConnectCallback;
clientSocket.ConnectAsync(socketAsyncEventArgs);

我在 https://subdomain.maindomain.com/clientaccesspolicy.xml 有以下 clientaccesspolicy.xml 文件:

<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*" http-methods="*">
                <domain uri="https://subdomain.maindomain.com"/>
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
                <socket-resource port="4502" protocol="tcp"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

我能够从 visual studio 运行 Silverlight 应用程序的本地实例并且可以建立套接字连接,运行在浏览器内和在浏览器外-浏览器。当我部署应用程序时,我仍然可以使用浏览器外版本进行连接,但浏览器内版本会出错并显示以下消息:

AccessDenied: An attempt was made to access a socket in a way forbidden by its access permissions.

在我的本地环境中,我来自 Visual studio运行,如果我创建主机文件条目:

127.0.0.1 myapp.local

并更新我的 localhost 浏览器内实例(来自 VS 的 运行ning)以使用 myapp.local,我可以重现相同的错误,这表明错误发生在根域不是 localhost,无论应用程序托管在何处。

我已经检查了我的防火墙和防病毒软件的事件日志,寻找它们可能阻止连接请求的迹象,但没有看到任何证据。

有没有其他人遇到过这个问题并对我的问题可能是什么提出建议?

对于 Silverlight,您需要一个套接字策略服务器。 详情见http://msdn.microsoft.com/en-us/library/cc645032%28v=vs.95%29.aspx

根据问题的描述以及评论和文章 "Relaxed Cross-Domain Access Restrictions",我认为最有可能的是,当应用程序在 [=27] 中 运行 时,问题很可能是访问限制=] 模式。

要验证您的应用程序 运行 具有受信任的权限,您可以检查 属性 Application.HasElevatedPermissions 是否 true

此外,请尝试遵循本指南How to: Enable Trusted Applications to Run Inside the Browser

确保您的服务器的防火墙没有阻止 "policy server" 端口 943

如果您仍然无法连接到服务器,请尝试将您的服务工作的端口更改为 45024534 范围内的某个端口。