gpt4 book ai didi

silverlight - 在某些浏览器中第一次未请求 clientaccesspolicy.xml

转载 作者:行者123 更新时间:2023-12-04 10:56:20 27 4
gpt4 key购买 nike

我在 Silverlight 4 中遇到了跨域 Web 服务调用的奇怪问题。

启动后,应用程序立即在下载它的同一主机上调用 Web 服务,但在不同的端口上(例如,应用程序位于 http://www.mydomain.com:80,而 Web 服务位于 http://www.mydomain.com:81)。不涉及 SSL。
主机提供了正确的 clientaccesspolicy.xml 文件,并且大部分时间一切正常(例如 99.9%)。

但是,在某些情况下,浏览器不会请求 clientaccesspolicy.xml,因此 Web 服务调用被阻止并失败并出现跨域错误。

在典型情况下,这是您使用 Fiddler 或 Chrome 开发人员工具看到的请求序列:

  • index.html(托管 Silverlight 应用程序的页面)
  • silverlight.js
  • application.xap
  • clientaccesspolicy.xml(请求和下载正确)
  • 网络服务电话

  • 但是在某些情况下,您只能看到
  • index.html(托管 Silverlight 应用程序的页面)
  • silverlight.js
  • application.xap
  • -> 跨域错误(未请求客户端访问策略,未调用 Web 服务)。

  • 如果所有这些条件都为真,这只会发生在少数机器(都运行 Windows 7)上:
  • 内运行的应用程序Chrome、Firefox 或浏览器外 (IE 始终有效)
  • 它是 第一次加载页面 (即,如果您点击浏览器的重新加载按钮,问题就会消失。关闭/重新启动浏览器,第一次仍然有问题)
  • 没有 fiddler 运行(如果您通过 Fiddler 运行流量,问题就会消失)。但是,Chrome 开发人员工具不起作用。
  • 机器在里面与应用程序相同的域 服务器。如果从外网访问页面(使用同一台机器),则问题不存在。

  • 在那些机器上,在这些情况下,问题是 100% 可重现的。

    什么可能导致这种情况?我可以执行哪些步骤来跟踪问题?

    最佳答案

    这个问题显然很少见,但在微软的帮助下我找到了解决方案。我将其发布以供将来引用,以便希望 this不会再发生了。

    作为安全措施, Silverlight 阻止 Internet 区域和本地 Intranet 区域之间的任何跨域调用 .在这种情况下,它甚至不会请求 clientaccesspolicy.xml。因此,如果应用程序托管在 www.myhost.com(Internet 区域)上,Silverlight 会阻止他调用 www.another.com(本地 Intranet 区域)上的 Web 服务。

    This blog post详细解释了它。

    因此,如果您有以下一种或几种症状(尽管丢弃了明显的跨域错误,如格式错误或错位的 clientaccesspolicy.xml):

  • 来自一些明显随机的机器(几个不同的位置/域)的跨域错误,但在其他机器上工作
  • 根本没有请求 clientaccesspolicy.xml
  • 适用于某些浏览器,不适用于其他浏览器。显然是随机的,有时不适用于任何浏览器。
  • Fiddler 打开时有时没问题,但 Fiddler 不运行时出错
  • 在本地主机上一切正常

  • 可能值得尝试以下操作,以便将应用程序主机和 Web 服务置于同一安全区域:
  • 转到 IE 安全设​​置(这些设置也被访问网络的任何应用程序使用,即任何其他浏览器)
  • 将托管应用程序的地址和托管 web 服务的地址添加到 本地内网网站
  • 取消选中“自动检测 Intranet 网络”标志(以便它们 最终都在 Internet 区域 中)
  • 关于silverlight - 在某些浏览器中第一次未请求 clientaccesspolicy.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847220/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com