开发者社区> 风华圆舞> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

分析Silverlight跨域调用

简介: 分析Silverlight跨域调用 在silverlight开发的过程中不免要遇到跨域的问题,在这里以跨域调用Webservice为例子来分析一下跨域的问题。   先介绍一下我的测试项目,我用flash和silverlight一同来调用一个webservice,一个flash客户端,一个silverlight客户端,一个web项目来host flash和silverlight,再加上一个webservice端。
+关注继续查看
分析Silverlight跨域调用

在silverlight开发的过程中不免要遇到跨域的问题,在这里以跨域调用Webservice为例子来分析一下跨域的问题。
 
先介绍一下我的测试项目,我用flash和silverlight一同来调用一个webservice,一个flash客户端,一个silverlight客户端,一个web项目来host flash和silverlight,再加上一个webservice端。
flash发布到web项目的swf文件夹下。  web项目中的clienttestpage.html中的sl和flash来调用webservice。
File?id=df5kjk97_861g3k76pgq_b

 具体如何调用webservice我这里就略去了。
我的webservice里有一个方法

[WebMethod]
public string SayHello(string name) {
return "Hello " + name;
}

 

 
webservice
File?id=df5kjk97_862djnjstfh_b
 
Html Host页面
File?id=df5kjk97_863f9w53xg6_b
 

 
这里先用silverlight来调用,在输入用户名都点击invoke按钮看看发声了什么。
在firefox中打开firebug的网络监视器
 
File?id=df5kjk97_864g2f42ndm_b
 这里发现他先去webservice所在的域的根目录下请求一个 clientaccesspolicy.xml 的文件,在没有到后又去请求一个crossdomain.xml的文件,同样也是没有找到,返回404。
 
好,这里我在webservice域根下放入一个clientaccesspolicy.xml 
clientaccesspolicy.xml
img_405b18b4b6584ae338e0f6ecaf736533.gif代码

<?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的请求,所以要加上红色部分。
再次调用看看是什么情况
File?id=df5kjk97_866c9rxndgz_b
请求到了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>

 

再次调用
File?id=df5kjk97_867gcj26qgh_b
在没有找到clientaccesspolicy.xml的情况下,去请求crossdomain.xml文件,得到响应后就正式请求webservice文件,并且也得到了返回值。
 

 
接下来看flash  这里用as2.0做的。 
File?id=df5kjk97_868ctr6r8d4_b
他一开始直接就请求了crossdomain.xml,并没有去请求clientaccesspolicy.xml。
File?id=df5kjk97_869gccksxp5_b
再输入用户名后,直接向webservice post数据,得到返回值。
 
好接下来看看as3的flash又会如何。
File?id=df5kjk97_870fb9fjgzn_b
 
机制有些改变,一开始没去请求xml。
 
输入用户名,调用
 
File?id=df5kjk97_871ghhvrrc6_b
 
再看看没有找到xml的情况
File?id=df5kjk97_872chgcsgdz_b

 
 
好了在看看网上我搜索到的一些说法。
 
“出于安全考虑,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.都可以使用

 
 

 


参考资料:

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
扩展jQuery的方法统一处理AJAX调用过程中产生的异常错误信息
由于项目中大量的实用了.post方法,而该方法默认不对请求的异常进行处理,后期又要处理该问题。前期的解决方案是将使用.post方法,而该方法默认不对请求的异常进行处理,后期又要处理该问题。
347 0
ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法
      群里好几个朋友都提到过这样的问题,说他们在Silverlight中调用了WebService方法,总报这个错误,贴图如下: 解决办法:      1、确定你的Silverligh...
517 0
如何对动态创建控件进行验证以及在Ajax环境中的使用
首先给一个常规的动态创建控件,并进行验证的代码 [前端aspx代码] DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.
529 0
+关注
风华圆舞
入行10年多的&ldquo;端&rdquo;开发者,经历了html、flash、SilverLight、ios、android等&ldquo;端&rdquo;上的开发技术。专注在大前端开发领域。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
基于浏览器的实时构建探索之路
立即下载
WEB浏览器中即将发生的安全变化
立即下载
函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务
立即下载