Silverlight跨域消费WCF服务安全问题解决方法(转)
这是一个老问题了,我也遇到了,就是wcf提供服务,Silverlight前段去消费服务。如果wcf提供的address比如是http:/localhost:8839/,而silverlight运行的端口不一致,比如是http://localhost:7777/,就不是在一个域中,出现跨域访问的问题。wcf默认在提供Web跨域是安全阻塞的。
网上查了一下,主要是解决方法是在wcf的根路径加入一个ClientAcessPolicy.xml。该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> |
但是,加入并没有效果,网上查了一下,是要把这个作为服务提供,后来根据Wxwinter的例子,该例子可以google到,添加了一个服务,解决了这个问题。
这个服务的服务接口是这样的
[ServiceContract] } |
具体服务是:
public class crossDomainService : IcrossDomainService public System.ServiceModel.Channels.Message ProvidePolicyFile() FileStream filestream = File.Open(@"跨域访问\ClientAcessPolicy.xml",FileMode.Open, FileAccess.Read, FileShare.ReadWrite);//此处访问xml地址 System.ServiceModel.Channels.Message result = Message.CreateMessage(MessageVersion.None, "", reader); } |
App配置默认问
<?xml version="1.0" encoding="utf-8" ?> <!-- 部署服务库项目时,必须将配置文件的内容添加到 </serviceBehaviors> <services> <!---baseAddress地址就是希望提供跨域访问的地址--> </services> |
把这个作为服务添加到wcf服务中,那么域http://localhost:7656/就可以提供跨域访问了。
检查是否成功,就是浏览http://localhost:7656/ClientAcessPolicy.xml,看是否可以看到xml文档。
该源代码在附件中crossDomainService.gif改为crossDomainService.rar即可,应该可以更改使用。
http://space.itpub.net/22259926/viewspace-627039#xspace-itemreply