从Silverlight应用程序调用WCF服务时出错?
我从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属性造成的。 请参阅内部异常的详细信息
的clientaccesspolicy.xml
应在托管服务领域的根文件夹(如http://mydomain.com/crossdomainpolicy.xml
,而不是在XAP文件的目录。
这显然说明在你的网页链接到:
放置一个clientaccesspolicy.xml文件在哪里 服务托管配置服务,以允许跨域域的根访问。
您是使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/
是的,我看到了。 – marko 2012-04-01 18:36:39