同一域上的CrossDomainError

时间:2009-08-24 21:50:47

标签: .net wcf .net-3.5

我正在学习使用WCF构建Silverlight 3应用程序以与后端进行通信。我们将在Server2008或Vista上部署到IIS7。客户端二进制文件以及Web服务二进制文件都位于同一IIS Web目录中。当我点击服务首页(http://localhost/MyService.svc)时,它返回就好了。当我点击应用程序(http://localhost/index.html)时,我得到了我的Silverlight应用程序。静态材质渲染得很好,但是我试图用CrossDomainError填充返回的两个字段。根据我的理解,当您从其他域上托管的页面访问服务时会发生这种情况。我不相信我这样做,除非在不知不觉中。

异常消息是:

[CrossDomainError] 参数:http://localhost:2721/Service1.svc 调试资源字符串不可用。通常,密钥和参数提供了足够的信息来诊断问题。看[我在这里不会重现的一些可怕的网址,因为它无论如何都是无用的]

我打开了端口2721,无论是入站还是出站都没有效果。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

对于两个被认为具有相同来源的文档,一切都必须完全相同:协议(http / https),域和端口。

因此,如果您打开http://localhost并尝试向http://localhost:2721发出请求,则会收到该错误。

答案 1 :(得分:1)

您需要在网站的根目录中使用crossdomain.xml和/或clientaccesspolicy.xml(闪存兼容性需要crossdoomain.xml,两者都适用于silverlight)。这个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>