wcf类库跨域异常

时间:2011-10-23 13:05:00

标签: wcf silverlight-3.0

在开始之前,我应该说我使用的是silverlight3和.Net 3.5。 我有一个wcf类库,里面有一些方法,我把它添加到一个silverlight类库(添加wcf类库,首先我将整个我的wcf类库项目添加到silverlight类库解决方案然后我添加wcf类库的服务引用到我的silverlight类库),想象一下silverlight类库的输出是一个用户控件,所以我将类库添加到silverlight应用程序(我的主项目)作为服务引用使用usercontrol但是当应用程序想要实例化usercontrol时抛出异常

  

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

我知道我应该有一个cleintaccesspolicy.xml文件,但我不知道在哪里。

2 个答案:

答案 0 :(得分:0)

您可以通过两种方式解决此问题。

首先:您的商店服务可以实施为Silverlight应用程序提供访问策略的方法:

public interface IGalleryShopService
{
    [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    Stream GetSilverlightClientAccessPolicy();

    /* other contracts declarations */
}

在实际实现中,您需要将实际的XML作为流返回。可以在MSDN找到Silverlight的XML示例。

第二次:只需将clientaccesspolicy.xml放入服务实施的根目录中,如this blog post中所述。

答案 1 :(得分:0)

只需将clientaccesspolicy.xml放在根目录中,即

c:\inetpub\wwwroot\clientaccesspolicy.xml 

然后它会起作用。

因为您的网站在http://localhost/clientaccesspolicy.xml中搜索clientaccesspolicy.xml,否则您可以更改xml文件的路径。使用虚拟目录将其置于root。