Silverlight 到 WCF 跨域异常,但正在成功读取 clientaccesspolicy.xml
Posted
技术标签:
【中文标题】Silverlight 到 WCF 跨域异常,但正在成功读取 clientaccesspolicy.xml【英文标题】:Silverlight-to-WCF cross-domain exception, but clientaccesspolicy.xml is being read successfully 【发布时间】:2011-10-15 21:31:05 【问题描述】: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>
crossdomain.xml
:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy>
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*" secure="true" />
</cross-domain-policy>
这里没什么特别的,它是数百万 WCF 服务用来允许 Silverlight 客户端访问它们的标准设置。不幸的是,此设置在我部署到的实时环境中不起作用。用于测试部署的预生产环境的设置与实际环境相同(或者系统管理员声称如此),并且在那里一切正常,这就是我如此困惑的原因。
我让其中一位系统管理员使用 HTTPDebuggerPro 跟踪 Silverlight 客户端的请求,它显示客户端正在检索 clientaccesspolicy.xml
和 crossdomain.xml
没有问题(HTTP 状态 200)。但是,在请求这些文件后,客户端会尝试调用服务并立即收到CrossDomainException
。
我还尝试让系统管理员将 WCF 服务 URL 添加到 Silverlight 客户端所在框上的 Internet Explorer 的“允许的站点”列表中(根据 http://blogs.msdn.com/b/fiddler/archive/2010/11/22/fiddler-and-silverlight-cross-zone-cross-domain-requests.aspx 的最后一段的最后一句),但是那也没用。
哈哈!
【问题讨论】:
您找到解决方案了吗?我正面临同样的问题 【参考方案1】:clientaccesspolicy.xml 是否放置在您域的根目录中?
【讨论】:
这两个文件都位于服务作为虚拟应用程序托管的子目录中(C:\inetpub\wwwroot\MyServices 映射到 IIS 中的 /MyServices,crossdomain.xml 位于 C:\inetpub \wwwroot\MyServices\crossdomain.xml)。 您可以尝试将它们移动到您域的根目录吗?根据 MSDN,它应该放在“托管服务的域的根目录,以配置服务以允许跨域访问。” 两个 .xml 文件都在 C:\inetpub\wwwroot\ 和 C:\inetpub\wwwroot\MyServices\ 中。以上是关于Silverlight 到 WCF 跨域异常,但正在成功读取 clientaccesspolicy.xml的主要内容,如果未能解决你的问题,请参考以下文章
跨域 WCF - Silverlight 配置错误 a:ActionNotSupported
获取 Silverlight 5 WCF 服务的完整异常跟踪