Silverlight和wCF访问的跨域问题

时间:2011-03-29 08:10:11

标签: silverlight wcf

我写了WCF服务,我也写了(在同一个解决方案中)silverlight客户端。 我试图从silverlight客户端访问WCF服务 - 我得到跨域异常。

只有当我在服务器计算机上运行系统时才会发生这种情况(通过IIS 7.5)

我尝试在本地计算机上运行相同的系统(wcf服务器和Silverlight客户端) 它没有发生。

例外:

尝试向URI“http:// localhost:4522 / MyService”发出请求时发生错误。这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略。您可能需要联系服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。有关更多详细信息,请参阅内部异常。

我在网上看到我需要添加类似ICrossDomainService的东西 - 但我不知道我需要在我的项目中定义它们(在Silverlight项目上?在WCF服务器项目上?)

有人可以帮我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为您需要在网站的根文件夹中创建客户端访问策略文件。

此处描述:http://msdn.microsoft.com/en-us/library/cc645032(v=vs.95).aspx

策略文件如下所示,您需要根据跨域要求对其进行定制。此示例来自MSDN,可能无法在不更改的情况下使用。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
<!--Enables Silverlight 3 all methods functionality-->
    <policy>
      <allow-from http-methods="*">      
        <domain uri="*"/>
      </allow-from>      
      <grant-to>      
        <resource path="/api" include-subpaths="true"/>
      </grant-to>      
    </policy>
<!--Enables Silverlight 2 clients to continue to work normally -->
    <policy>
      <allow-from >      
        <domain uri="*"/>
      </allow-from>      
      <grant-to>      
        <resource path="/api" include-subpaths="true"/>
      </grant-to>      
    </policy>
  </cross-domain-access>
</access-policy>

我对模式不太熟悉,但我再次点击了MSDN。这样的事情可能更接近:

</cross-domain-access>
  <policy>
    <allow-from>
      <domain uri="*"/>
    </allow-from>
    <grant-to>
      <resource/>
    </grant-to>
  </policy>
</cross-domain-access>

请检查MSDN以确保您没有打开安全漏洞!