从Silverlight应用程序调用WCF服务时出错?

时间:2012-04-01 18:13:27

标签: wcf silverlight

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

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

  

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

2 个答案:

答案 0 :(得分:2)

clientaccesspolicy.xml应位于托管服务的域的根文件夹中(例如http://mydomain.com/crossdomainpolicy.xml,而不是xap文件的目录。

您在链接到的页面中明确说明:

  

将clientaccesspolicy.xml文件放在域的根目录中   托管服务以配置服务以允许跨域   访问。

答案 1 :(得分:0)

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

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

由于Silverlight应用程序的沙盒安全规则,它们只能与来自同一Site of Origin的Web服务进行通信,除非ClientAccessPolicy应用于Web服务,以便为外部Site of Origin使用它。如果您不是托管网络服务的人,您可能无法对此进行任何控制。

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