当我尝试从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
有人在托管弹性网站时遇到过类似的问题吗?
答案 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>