分析Silverlight跨域调用(转自http://hi.baidu.com/ydyang2010/blog/item/a2b896fe9a9e2857d7887d4d.html)...

 
分析Silverlight跨域调用
2011-01-11 10:33

先介绍一下我的测试项目,我用flash和silverlight一同来调用一个webservice,一个flash客户端,一个silverlight客户端,一个web项目来host flash和silverlight,再加上一个webservice端。
flash发布到web项目的swf文件夹下。  web项目中的clienttestpage.html中的sl和flash来调用webservice。

 具体如何调用webservice我这里就略去了。
我的webservice里有一个方法
[WebMethod]
public string  SayHello( string  name) {
return " Hello  " +  name;
}

 

 
webservice
 
Html Host页面
 
 
 
这里先用silverlight来调用,在输入用户名都点击invoke按钮看看发声了什么。
在firefox中打开firebug的网络监视器
 
 这里发现他先去webservice所在的域的根目录下请求一个 clientaccesspolicy.xml 的文件,在没有到后又去请求一个crossdomain.xml的文件,同样也是没有找到,返回404。
 
好,这里我在webservice域根下放入一个clientaccesspolicy.xml 
clientaccesspolicy.xml
代码
<? xml version="1.0" encoding="utf-8"  ?>
< access-policy >
< cross-domain-access >
< policy >
< allow-from  http-request-headers="*" >
< domain  uri ="*" />
</ allow-from >
< grant-to >
< resource  include-subpaths ="true"  path ="/" />
</ grant-to >
</ policy >
</ cross-domain-access >
</ access-policy >

 

因为webservice有 requestheaders 的请求,所以要加上红色部分。
再次调用看看是什么情况
请求到了clientaccesspolicy.xml 后就去真正请求webservice文件了。  并且得到了返回值。
 
接下来,去掉clientaccesspolicy.xml,加入crossdomain.xml
crossdomain.xml
<? xml version = " 1.0 " ?>
< cross - domain - policy >
< allow - access - from domain = " * " />
<allow-http-request-headers-from domain="*" headers="*"/>
</ cross - domain - policy >

 

再次调用
在没有找到clientaccesspolicy.xml的情况下,去请求crossdomain.xml文件,得到响应后就正式请求webservice文件,并且也得到了返回值。
 
 
 
接下来看flash  这里用as2.0做的。 
他一开始直接就请求了crossdomain.xml,并没有去请求clientaccesspolicy.xml。
再输入用户名后,直接向webservice post数据,得到返回值。
 
好接下来看看as3的flash又会如何。
 
机制有些改变,一开始没去请求xml。
 
输入用户名,调用
 
 
再看看没有找到xml的情况

 
 
好了在看看网上我搜索到的一些说法。
 
“出于安全考虑,FlashPlayer默认的安全设置是不允许进行跨域操作的。即便是同一个网站,如果用不同的方式访问,也会被FlashPlayer认为是跨域操作。
为解决Flash/Flex系统中的跨域问题,提出了crossdomain.xml跨域策略文件。有了它,就可以解决跨域问题。”
 
“SilverLight要实现跨域访问,必须在服务端被访问域的直接域名下,配置  clientaccesspolicy.xml( 或 crossdomain.xml)文件,即可以访问 http://{domainName}/clientaccesspolicy.xml。 ”
 
 
提出问题
 关于crossdomain.xml 和 clientaccesspolicy.xml 的区别。

1、这两个文件真的是可以任选其一吗?

2、这两个文件分别需要被放在服务端还是客户端?

3、不管后台服务部署在IIS还是其它环境中,这两个文件都可以使用吗?

 

 

解答

1.silverlight在使用中可以任选其一,建议直接使用clientaccesspolicy.xml。flash只能使用crossdomain.xml。

2.都是必须在服务端被访问域的直接域名下  。

3.都可以使用

 

参考资料:

转载于:https://www.cnblogs.com/dreamysmurf/archive/2012/07/20/2601251.html

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值