Flex中出名难缠的“安全沙箱冲突”问题一直让人抓狂,我还真遇到一次奇怪的“冲突”。
在一次发布Flex程序到服务器后,刚打开网站并未向服务器请求数据,FlashPlayer日志马上显示错误:
错误: 请求位于 xmlsocket://localhost:27813 的资源(请求者从 http://192.168.0.100/test/Main.swf发出请求),原因是无法访问服务器 *** 安全沙箱冲突 *** 到 localhost:27813 的连接已停止 - 不允许从 http://192.168.0.100/test/Main.swf 进行连接
当向服务器请求数据时,再有报错:
中文错误 faultCode:Channel.Security.Error faultString:'访问 URL 时遇到安全性错误' faultDetail:'目标:DefaultHTTP' 英文错误 faultCode:Channel.Security.Error faultString:Security error accessing url faultDetail:Destination: DefaultHTTP
FlashPlayer日志显示错误:
警告: 未能 http://localhost:37813/crossdomain.xml 中加载策略文件 *** 安全沙箱冲突 *** 到 http://localhost:37813/test/User.ashx?hostport=192.168.0.100&https=N&id=C0D13BEB-D6A2-7178-96D0-448784A3951D 的连接已停止 - 不允许从 http://192.168.0.100/test/Main.swf 进行连接
我顿时纳闷了:
1.所有Flex和ASP.NET文件都放在http://192.168.0.100/test中,按道理不存在跨域访问的问题,也就是不需要crossdomain.xml策略文件。
2.第一次打开网站时不可能向服务器请求数据(代码确认),那这个请求从何而来?
3.数据都在服务器,怎么反而访问本地的localhost的27813或37813端口?
经过个多星期的反复测试找原因,在一次对比正常项目的文件中,发现项目文件.actionScriptProperties里,compiler段其中一个属性includeNetmonSwc,正常项目该值是false,而有问题项目该值是true!问题似乎找到了,修正该值后重新编译项目,问题解决!
具体原因参见:《Flash Builder Network Monitor Project Property Causes HTTP Security Error》,意思是曾经打开过Flex Builder的网络监视器,则includeNetmonSwc便自动设置为true。该属性的意思是包含网络监视器的swc类库,当我们发布时,不需要网络监视器的类库,但Flash Builder把类库也加载进来了,于是报错。
当然还有一个更简单的办法,就是发布前保证网络监视器是禁用状态,也能避免问题的出现。
希望能帮助遇到类似问题的朋友。
转载请注明原文地址:http://www.cnblogs.com/litou/archive/2011/10/28/2227929.html