Silverlight clientaccesspolicy.xml在某些浏览器中不是第一次被请求的
我在Silverlight 4中遇到了一个奇怪的跨域Web服务调用问题 启动后,应用程序立即在下载Web服务的主机上调用Web服务,但调用的端口不同(例如,应用程序位于,Web服务位于)。不涉及SSL。 主机提供了一个正确的clientaccesspolicy.xml文件,并且在大多数情况下一切都正常工作(比如99.9%) 但是,在某些情况下,浏览器不会请求clientaccesspolicy.xml,因此webservice调用被阻止,并因跨域错误而失败 在典型情况下,这是您使用Fiddler或Chrome developer工具看到的请求序列:Silverlight clientaccesspolicy.xml在某些浏览器中不是第一次被请求的,silverlight,silverlight-4.0,Silverlight,Silverlight 4.0,我在Silverlight 4中遇到了一个奇怪的跨域Web服务调用问题 启动后,应用程序立即在下载Web服务的主机上调用Web服务,但调用的端口不同(例如,应用程序位于,Web服务位于)。不涉及SSL。 主机提供了一个正确的clientaccesspolicy.xml文件,并且在大多数情况下一切都正常工作(比如99.9%) 但是,在某些情况下,浏览器不会请求clientaccesspolicy.xml,因此webservice调用被阻止,并因跨域错误而失败 在典型情况下,这是您使用Fiddler
- index.html(承载silverlight应用程序的页面)
- silverlight.js
- application.xap
- clientaccesspolicy.xml(正确请求和下载)
- 网络服务呼叫
- index.html(承载silverlight应用程序的页面)
- silverlight.js
- application.xap
- ->跨域错误(未请求clientaccesspolicy,未调用web服务)
- 在Chrome、Firefox或浏览器外运行的应用程序(IE始终有效)
- 这是您第一次加载页面时(即,如果您点击浏览器的“重新加载”按钮,问题就会消失。关闭/重新启动浏览器,第一次仍然存在问题时)
- 没有Fiddler运行(如果通过Fiddler运行流量,问题就会消失)。不过,Chrome开发工具没有任何效果
- 计算机与应用程序服务器位于同一域中。如果您从外部网络(使用同一台机器)访问该页面,则不存在问题
这可能是什么原因造成的?我可以执行哪些步骤来跟踪问题?这个问题显然非常罕见,但在Microsoft的帮助下,我找到了解决方案。我把它贴出来供将来参考,希望以后不会再发生这种事 作为一种安全措施,Silverlight会阻止Internet区域和本地Intranet区域之间的任何跨域调用。在这种情况下,它甚至不请求clientaccesspolicy.xml。因此,如果应用程序托管在www.myhost.com(Internet专区)上,Silverlight将阻止他调用www.other.com(本地Intranet专区)上的Web服务 详细解释一下 因此,如果您有以下一个或多个症状(尽管已放弃了明显的跨域错误,如格式错误或放置错误的clientaccesspolicy.xml):
- 一些明显随机的机器(几个不同的位置/域)产生的跨域错误,但在其他机器上工作
- 根本没有请求clientaccesspolicy.xml
- 适用于某些浏览器,不适用于其他浏览器。显然是随机的,有时不使用任何浏览器
- 当Fiddler打开时,有时没有问题,但在Fiddler未运行时出现错误
- 在本地主机上一切正常
- 转到IE安全设置(访问网络的任何应用程序也会使用这些设置,即任何其他浏览器)
- 将承载应用程序的地址和承载Web服务的地址添加到本地Intranet站点 或
- 取消选中“自动检测intranet网络”标志(这样它们都会在Internet区域中结束)