我遇到从Silverlight项目到ASP中的WCF服务的跨域访问问题。
本教程建议制作crossdomain.xml
或clientaccesspolicy.xml
个文件,并将它们放在服务的Web根目录中。
我制作了这些文件,并将它们放在Visual Studio中项目的顶层。我还有问题。这是否意味着我将文件放在错误的位置?
clientaccesspolicy.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>
的crossdomain.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>
更新:我目前正在开发服务器。我怎样才能让它在那里工作?
答案 0 :(得分:0)
据我所知,他们必须进入Web服务器的根目录(/),而不是Web项目的根目录。
答案 1 :(得分:0)
这些文件必须与IIS Web服务器上的WCF服务一起部署。
因此,“root”不是您的项目之一,而是网站之一(在IIS网站的意义上)。
答案 2 :(得分:0)
您最终使用开发Web服务器的一个问题是,保存WCF服务的Web项目可能会指定虚拟路径。这会将位于项目根目录的内容放在虚拟文件夹中,从客户端视图的“/”根目录开始。因此,将clientaccesspolicy.xml文件放在项目的根目录下不会将文件放在Silverlight客户端所期望的“/clientaccesspolicy.xml”中。
在Visual Studio中打开托管WCF服务的Web项目的属性窗口,选择Web选项卡,将虚拟路径设置为“/”。 (您可能希望在Silverlight项目中创建引用和代理之前执行此操作)。
除非您打算支持Silverlight以外的客户端技术,否则您不需要crossdomain.xml文件。答案 3 :(得分:0)
我的档案在正确的位置。问题是这两个文件的名称是交换的 - SL跨域规则是用Flash文件名命名的,反之亦然。