从c#响应flash的策略文件请求

时间:2012-06-27 22:29:50

标签: c# sockets actionscript policy cross-domain-policy

我开发了一个带有c#的服务器应用程序和一个带有flash动作脚本3.0的客户端应用程序。从带有消息的浏览器调用时,Flash套接字要求提供策略文件

<policy-file-request/>
到目前为止,一切都很正常。我的服务器正在等待此消息并向客户端发送一个策略文件字符串,如下所示:

public const String POLICY_FILE = "<?xml version=\"1.0\"?>\n" +
    "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\">\n" +
    "<cross-domain-policy>" +
    "<allow-access-from domain=\"*\" to-ports=\"*\" />" +
    "</cross-domain-policy>\u0000";

此字符串以这种方式发送:

if (message.Contains("policy-file-request"))
            {
                client.Send(Encoding.ASCII.GetBytes(Statics.POLICY_FILE));
                return;
            }

我很确定这是有效的,但我真的不知道发生了什么,并开始不起作用。当Flash客户端从服务器收到此消息时,连接成功,一切都按照它必须去的方式进行。但是现在flash客户端等待20秒(闪存套接字超时)并抛出安全异常

[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

我被困住了,无法前进。我正在收听端口963,服务器机器的完全限定名称是“mypc.domain.local”,可以通过我的网络访问。此机器上还运行了一个IIS,并在此处托管了Flash应用程序。

http://mypc.domain.local:90/page.html 

这是方式,我打电话给我的Flash应用程序和

mypc.domain.local:963

是服务器运行的地址。我也在这台机器上工作。我尝试调用页面http://localhost:90/page.htmlhttp://127.0.0.1:90/page.html,并尝试连接到服务器localhost:963或127.0.0.1:963。每个组合都有相同的结果。

这里有什么问题?什么可以改变导致我的工作代码崩溃?

感谢。

1 个答案:

答案 0 :(得分:0)

如果没有更多代码,很难分辨,但根据您显示的内容,似乎当该请求进入时,您会回复策略文件的内容,这不是实际的有效HTTP响应。我对20秒超时的猜测是它还在等待HTTP头。

如果可能的话,尝试使用BCL中已经存在的HTTP类而不是手动执行http,但是如果你必须自己做套接字,那么在调试过程中使用类似Fiddler的东西,因为它很适合识别违反HTTP协议。