默认情况下,Silverlight仅支持在同域或源站点上调用Web服务,这意味着调用必须使用同一子域、协议和端口。
通过在其他域的根目录部署使用正确跨域策略文件的Web服务,可以在该域中启用基于Silverlight的应用程序要调用的Web服务,Silverlight支持两种类型的跨域策略文件。
Silverlight跨域策略(clientaccesspolicy.xml)
Flash跨域策略(crossdomain.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 path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy>
它将配置允许从任何其他域访问当前域上的所有资源。<domain uri="*"/>将启用所有HTTP和HTTPS调用方法。
crossdomain.xml
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-http-request-headers-from domain="*" headers="*" /> </cross-domain-policy>
允许从任何其他域访问服务。
将这两个文件放在Silverlight应用程序将要调用的Web服务工程中的根目录下,就可以跨域调用该Web服务了。