2012-04-01 85 views
1

我从Silverlight应用程序调用服务并获取crossdomainploicy错误。我把clientaccesspolicy.xml放在与xap.file相同的文件夹中。从Silverlight应用程序调用WCF服务时出错?

http://msdn.microsoft.com/en-us/library/cc197955%28v=vs.95%29.aspx

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

回答

2

clientaccesspolicy.xml应在托管服务领域的根文件夹(如http://mydomain.com/crossdomainpolicy.xml,而不是在XAP文件的目录。

这显然说明在你的网页链接到:

放置一个clientaccesspolicy.xml文件在哪里 服务托管配置服务,以允许跨域域的根访问。

+0

是的,我看到了。 – marko 2012-04-01 18:36:39

0

您是使Web服务还是使用第三方Web服务?您提到http://msdn.microsoft.com/en-us/library/cc197955%28v=vs.95%29.aspx的文章仅适用于您提供网络服务的文章。

您所遇到的是一个Site of Origin SOS错误。如果您尝试使用第三方Web服务,并且他们不使用clientaccesspolicy,则可以通过创建Web服务的包装来解决此问题。基本上,您必须创建一个Web服务,并将其作为您的Silverlight应用程序在同一站点上进行托管。然后,您的webservice将调用第三方webservice并相应地返回值。

由于Silverlight应用程序的沙盒安全规则,它们只能与来自同一站点的Web服务进行通信,除非将ClientAccessPolicy应用于将Web服务打开以供外部Site of Origins使用。再次,如果你不是那个托管web服务的人,你可能无法控制这个。

SOS适用于主机名,端口和协议。所以http://localhost/是不同于https://localhost/http://localhost:9999/是不同于http://localhost:80/

相关问题