从silverlight 4获取WCF服务

时间:2013-05-06 00:38:32

标签: c# wcf silverlight cross-domain

我有一个包含Silverlight 4项目和WCF类库项目的解决方案。 我在Silverlight项目中为WCF服务添加了服务引用(WCF未在IIS上发布)。我尝试从Silverlight项目调用该服务,它给了我以下异常:

  

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

我尝试通过将以下两个文件添加到WCF库项目

来解决此问题

1)clientaccesspolicy.xml,它具有以下xml

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

2)包含以下xml

的crossdomain.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>

然后在Silverlight项目中构建WCF项目并更新服务引用,但仍然存在相同的异常。

我该怎么办才能处理这个例外?我应该发布服务吗?这被认为是自托管吗?

1 个答案:

答案 0 :(得分:0)

将clientaccesspolicy.xml文件放到iis的根目录下。例如c:\ inetpub \ wwwroot