【问题标题】:responding policy-file-request of flash from c#响应来自 c# 的 flash 的策略文件请求
【发布时间】:2012-06-29 10:39:46
【问题描述】:

我已经使用 c# 开发了一个服务器应用程序和一个使用 flash action script 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 秒(flash socket 超时)并抛出安全异常

[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 连接到服务器。每种组合的结果都相同。

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

谢谢。

【问题讨论】:

  • 不,所有防火墙都关闭了,直接从 swf 连接成功。由于跨域,只能通过网络浏览器建立连接。
  • 由于您使用的是http,我会尝试使用fiddler来帮助查看消息的实际内容
  • fiddler 是个好主意,我会试着告诉你结果。

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


【解决方案1】:

如果没有更多代码,很难判断,但根据您所展示的内容,当该请求进入时,您似乎使用策略文件的内容进行响应,这不是实际有效的 HTTP 响应。我对 20 秒超时的猜测是它仍在等待 HTTP 标头。

如果可能,请尝试使用 BCL 中已有的 HTTP 类,而不是“手动”执行 http,但如果您必须自己处理套接字,请在调试期间使用 Fiddler 之类的东西,因为它非常适合识别违反HTTP 协议。

【讨论】:

  • 您的意思是,策略文件请求正在等待带有 http 响应的响应?
猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2013-08-22
  • 2012-09-09
  • 2011-09-20
  • 1970-01-01
相关资源
最近更新 更多