Flex调用ASP.NET Web Service时的沙箱问题

  今天用Flex调用ASP.NET的Web Service时老是跳出了"Security error accessing url"的错误,查了资料,才知道这原来根Flash的沙箱有关。

  原理是,当SWF文件试图访问其它域上的数据时,Flash Player自动加载那个域上的policy文件,如果SWF文件所在的域被包含在这个policy文件中,数据就可以被访问,否则就不行,以下是Adobe官方的原文:

When a SWF file attempts to access data from another domain, Flash Player automatically attempts to load a policy file from that domain. If the domain of the SWF file that is attempting to access the data is included in the policy file, the data is automatically accessible.

而我所碰到的问题,就是因为我的IIS上没有这个policy file,那解决办法自然就是加上这个policy file。

解决办法

新建一个xml文件,命名为crossdomain.xml,如果不想麻烦的话,文件名就不要用其它的,就用这个。
把以下内容复制到xml文件中:
<?xml version="1.0"?>
<cross-domain-policy>
  
<allow-access-from domain="*" />
</cross-domain-policy>
然后把它保存到wwwroot下面,我曾试着把它放到应用程序的根目录,但不起作用,放到wwwroot下是可以的,上述的crossdomail.xml 允许所有的swf文件访问本主机。

然后就OK了。如果想看更详细的,就看:
http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=05B_Security_176_04.html
posted @ 2008-04-13 18:49 水言木 阅读(293) 评论(2)  编辑 收藏

  回复  引用  查看    
#1楼 2008-04-14 09:33 | XNet      
我的一个程序用到 flash socket + C# 通讯
在Flash player 9.0.115(有安全Bug)下是可以正常工作,
在Flash player 9.0.124(4.10更新的)不能正常工作
你说的以上问题我都处理了.不过还是提示沙箱问题.
这个问题,查了很多国外的网站,也有人提到过.但也没一直比较好的解决方法!
  回复  引用  查看    
#2楼 [楼主]2008-04-14 14:26 | 水言木      
@XNet
在Flex使用web service时的沙箱问题这么解决是可以通过的,但socket不太清楚,没试过。
在官方文档上有一段关于socket的policy file的说明,同样也是用policy file,但内容不同,地址是:
http://livedocs.adobe.com/flex/3/html/help.html?content=05B_Security_03.html
你点击Subtopics中的Website controls (cross-domain policy files),然后往下拉一点,有个"Socket policy files",你看一下里面的内容对你有没有帮助:)

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-13 18:58 编辑过
成果网帮您增加网站收入


相关链接: