专栏首页我和未来有约会分析Silverlight跨域调用

分析Silverlight跨域调用

分析Silverlight跨域调用

在silverlight开发的过程中不免要遇到跨域的问题,在这里以跨域调用Webservice为例子来分析一下跨域的问题。

先介绍一下我的测试项目,我用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.都可以使用

参考资料:

http://social.microsoft.com/Forums/de-DE/silverlightzhchs/thread/1be30f6c-c4bc-43e3-88a8-8c43951b152b http://silverlight.net/learn/videos/all/how-to-use-cross-domain-policy-files-with-silverlight/

http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Web 开发的演变:转向 Web.Next

    CERN 的 Tim Berners-Lee 发明现代 Web 时的初衷是将其作为允许在基于网络的系统上存储和链接静态文档的系统。之后的数年间,随着创新的发展和...

    用户1172164
  • Silverlight初级教程-概述

    Silverlight初级教程 概述 Silverlight 是微软的一项新技术,正如之前的asp一样,微软为了保持其竞争力重新设计了他的框架推...

    用户1172164
  • [礼物]发布一款silverlight开发的相册

    采用silverlight开发了一个相册,数据是读取静态的xml,"Photos.xml"。增加了一个"AppConfig.xml",相册的信息都可以在里边修改...

    用户1172164
  • 006-golang中XML文件的处理

    data),那么,字符数据会被累加到struct中第一个有tag为”,chardata”的字段。struct字段的类型可以是string或[]byte。如果没有...

    上善若水.夏
  • day07_02_XML解析思想

    黑泽君
  • 第70节:Java中xml和tomcat

    eXtendsible markup language 可扩展性语言,用来保存数据,用来配置文件,数据传输载体. 客户端->访问->服务器

    达达前端
  • 小程序开发知识点总结

    我承认,最近比较懒了,博客也很久没更新了,太对不住自己了,做了一段时间小程序开发,总结了一些知识点,直接上菜。

    用户1141560
  • 如何规划性能测试拓扑

    张树臣
  • 198. 打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小...

    lucifer210
  • 不会PS抠图?来试试这招吧!

    之前写Photoshop处理实验动物大体图片的内容,讲过使用钢笔工具抠除背景这一方法。

    Mark Chen

扫码关注云+社区

领取腾讯云代金券