调用另外一个站点允许的话应该有一个策略文件明确的相互允许。
如果把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控件指定文件的那个属性为什么只能是只读一样,肯定是有它的道理的.慢慢去体会了.