【Flex】Flex Builder中网络监视器导致“访问URL时遇到安全性错误”

  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 

posted @ 2011-10-28 17:16  泥头  阅读(6936)  评论(2编辑  收藏  举报