错误#2048安全沙箱违规 - 无法加载数据

时间:2011-05-30 20:59:55

标签: flex blazeds crossdomain.xml

当我尝试从flex进行java调用时,我收到以下错误。

  

[RPC Fault faultString =“发送失败”
  的faultcode = “Client.Error.MessageSend”
  faultDetail =“Channel.Security.Error错误
  错误#2048:安全沙箱违规:   'http://sample.com/sample.swf'不能   从中加载数据   http://sample:8080/messagebroker/amf。   网址:   的 'http://样品:8080 / messagebroker / AMF'“]

当我尝试在我的本地tomcat服务器上运行相同时,这工作正常。但是当作为网站托管时,我收到此错误。我也尝试将crossdomain.xml文件放在根目录中。但错误永远不会发生。 crossdomain文件如下所示。

<cross-domain-policy>

<site-control permitted-cross-domain-policies="all" />

<allow-access-from domain="*"  to-ports="*"/> 

<cross-domain-policy/>

日志说明了这个

  

连接到   的 'http://样品:8080 / messagebroker / AMF'   停止 - 不允许   http://sample.com/sample.swf

有人在托管弹性网站时遇到过类似的问题吗?

2 个答案:

答案 0 :(得分:1)

看一下您有不同的域http://sample .com /和http://sample:8080/

答案 1 :(得分:0)

游戏有点晚,但还有其他一些要检查的项目。

您声明可以运行tomcat的本地实例。我将假设您将此服务作为localhost而不是IP地址(和/或计算机名称)调用。如果您正在运行Flex应用程序并且尚未更改运行配置,那么您将从localhost运行。离开locahost域后,请确保进入运行配置(运行或调试按钮旁边的小向下箭头),然后使用您的IP地址输入运行应用程序的本地路径。现在,您将运行应用程序的IP地址到IP地址(或任何不是localhost)的服务。这通常可以解决问题。

接下来,确保您的crossdomain.xml文件位于服务器的ROOT。你应该可以浏览到http://yourhostname/crossdomain.xml。不应该涉及任何路径。 crossdomain.xml应该是托管服务的根级别。

可能还需要将Flex的本地工作空间实例设置为Web服务器(IIS,tomcat)下的虚拟目录。在我的情况下,我可以浏览到127.0.0.1/workspace/someflexapp/bin-debug/projectname.html,Flex应用程序将运行。

经过这么多次,按照上述步骤一直解决问题。

您可以使用如下所示的crossdomain.xml文件来开放访问flex将从Web / soap服务请求的大多数内容。

<cross-domain-policy>
   <site-control permitted-cross-domain-policies="all"/>
   <allow-access-from domain="*" to-ports="*"/>
   <allow-http-request-headers-from domain="*" headers="*"/>
   <allow-http-request-headers-from domain="*"/>
</cross-domain-policy>