我从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属性的服务代理。 有关详细信息,请参阅内部异常
答案 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/不同