我在Silverlight 4中使用跨域webservice调用遇到了一个奇怪的问题。
应用程序在启动后立即调用同一主机上的Web服务,但是在另一个端口上(例如,应用程序位于http://www.mydomain.com:80,Web服务位于http://www.mydomain.com:81) )。没有涉及SSL。 主机提供了一个正确的clientaccesspolicy.xml文件,一切正常正常(如99.9%)。
但是,在某些情况下,浏览器不会请求clientaccesspolicy.xml,因此Web服务调用被阻止并因跨域错误而失败。
在典型情况下,这是您使用Fiddler或Chrome开发人员工具看到的一系列请求:
在某些情况下,您只能看到
如果所有这些条件都成立,这只发生在少数几台机器上(全部运行Windows 7):
在这些机器上,在这种情况下,问题是100%可重复的。
可能导致这种情况的原因是什么?我可以采取哪些步骤来跟踪问题?
答案 0 :(得分:11)
这个问题显然非常罕见,但在微软的帮助下我找到了解决方案。我发布它以供将来参考,以便有希望this不会再发生。
作为安全措施, Silverlight会阻止Internet区域和本地Intranet区域之间的任何跨域调用。在这种情况下,它甚至不会请求clientaccesspolicy.xml。因此,如果应用程序托管在www.myhost.com(Internet区域)上,Silverlight将阻止他在www.another.com(本地Intranet区域)上调用Web服务。
This blog post详细解释了这一点。
因此,如果您有以下一种或几种症状(尽管已丢弃明显的跨域错误,例如格式错误或错误放置的clientaccesspolicy.xml):
尝试以下操作可能是值得的,以便将应用程序主机和Web服务放在同一安全区域中: