代码改变世界

跨域WEB Service 调用(摘自ASP.NET高级编程第三版)

2011-10-12 10:44  沐海  阅读(844)  评论(0编辑  收藏  举报

调用另外一个站点允许的话应该有一个策略文件明确的相互允许。

如果把WEBSERVICE和 ASP.NET整合到一个项目中。这个策略文件不使用和可以。按道理说为了更好的扩展性,应该写出策略文件,但是他的作用是(什么域被允许访问你的WEB服务器。)所以使用时最好考虑好项目中ASP.NET文件系统的安全性。

 

1.创建名为clientaccesspolicy.xml文件,并把它放在网站根目录下。(注:此文件一般使用在Silverlight调用时。)

Silverlight允许你没有任何限制的从一个WEB服务上调用另一个位于同一个WEB站点的WEB服务,

 

如果要调用位于另外一个WEB站点的WEB服务。则必须要有一个策略文件。

 

     clientaccesspolicy.xml文件声明了什么域被允许访问你的WEB服务器。

<?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 path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

 

允许任意访问。可以进行任意的HTTP请求,包括“下载WEB页面” 所以要注意,如果WEBService的项目单独放置,安全性比较高。如果WEBservice和ASP.NET WEB程序放在一起,这个策略文件最好不要添加。以防其他的权限出现漏洞。

 

 

注:此文件一般使用在Silverlight调用时。

因为,winform和服务端应用程序---无论创建什么样的策略文件,它们都能够做一个普通用户可以做的事情,这意味着他们能够下载所有公开内容。

 

另外,你可以在特定的域中限制访问在WEB页面上运行的Silverlight应用程序。;

 

 

 

 

比如我的webservice目录叫做WSProject,引用地址是http://localhost/WSProject/webservice.asmx,

那么silverlight不是在http://localhost/WSProject这个目录下找crossdomain.xml和clientaccesspolicy.xml,而是在http://localhost/下找这两个文件.

 

 

所以假如你的IIS默认目录是C:\inetpub\wwwroot的话,服务文件是部署在C:\inetpub\wwwroot\WSProject下,那么crossdomain.xml和clientaccesspolicy.xml这样的文件一定要放在C:\inetpub\wwwroot而不是http://localhost/WSProject.

 

  另外更多的时候,对于初学者做相关教程的时候,按照教程里的步骤,最后点VS2008里运行的时候,通常是把silverlight程序作为启动项目.我在做到这里的时候就遇到了本文所涉及到的问题.我发现这个时候在项目里添加crossdomain.xml或clientaccesspolicy.xml是无济于事的.VS的小型服务器会给你提供这样的测试环境,http://localhost:端口号/项目名/网页名,如前所述是注定找不到这两个文件的,所以,还是把服务文件先部署到IIS上然后再测试吧.

  关于silverlight和flash为什么都需要这样的文件,我还不是很理解,不过可能也是类似于asp.net中的fileupload控件指定文件的那个属性为什么只能是只读一样,肯定是有它的道理的.慢慢去体会了.

记录生活、工作、学习点滴!
E-Mail:mahaisong@hotmail.com 欢迎大家讨论。
沐海博客园,我有一颗,卓越的心!