2011-10-23 43 views
0

在我开始之前我应该​​说我使用silverlight3和.net 3.5。 我有一个wcf类库,其中有一些方法,我已经将它添加到silverlight类库(要添加wcf类库,首先我将整个我的wcf类库项目添加到silverlight类库解决方案,然后我添加一个WCF类库的服务引用到我的Silverlight类库),想象Silverlight类库的输出是一个用户控件,所以我添加了类库到Silverlight应用程序(我的主项目)作为服务参考使用用户控件但是,当应用程序要实例化用户控件抛出一个异常wcf类库跨域异常

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

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

回答

0

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

首先:贵店的服务可以实现方法Silverlight应用程序提供访问策略:

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

    /* other contracts declarations */ 
} 

在实际执行中,你需要回到实际的XML作为数据流。 Silverlight的XML示例可在MSDN找到。

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

0

简而言之clientaccesspolicy.xml在根目录下即

c:\inetpub\wwwroot\clientaccesspolicy.xml 

那么它会工作。

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