0

我正在开发一个能够使用 wcf Web 服务获取数据的 Silverlight 5 应用程序。但是一旦尝试保存或删除,就会请求 clientaccesspolicy.xml 文件。此请求发生在 HTTP 协议中,然后浏览器报告Display mixed contentjavascript 弹出对话框。完成的异步调用(例如BeginSaveChanges静默失败)不会在回调中返回错误消息。为什么通过 HTTPS 运行并获取数据的应用程序很高兴,因为蛤蜊突然想要客户端访问策略文件并且一切都停止了?

在失败之前,Fiddler 显示了对实际 Web 服务的成功调用以获取数据。但是当进行保存/删除调用时,对根 clientaccesspolicy 的 http 调用被重定向到子域 clientaccesspolicy.xml。

Fiddler 会话捕获

#   Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
285 200 HTTPS   test.application.company.com    /SUBSITE/WebService.svc/Terms()?$orderby=Description...{removed}... 742,658 no-cache    application/atom+xml;type=feed;charset=utf-8    iexplore:16376          
286 302 HTTP    test.application.company.com    /clientaccesspolicy.xml 189     text/html; charset=UTF-8    iexplore:16376          
287 200 HTTP    test.application.company.com    /SUBSITE/clientaccesspolicy.xml 341     text/xml    iexplore:16376          
288 302 HTTP    test.application.company.com    /crossdomain.xml    182     text/html; charset=UTF-8    iexplore:16376          
289 200 HTTP    test.application.company.com    /SUBSITE/crossdomain.xml    170     text/xml    iexplore:16376  

由于失败,我在 Fiddler 中没有看到实际的 webserivce 调用,但是当我在 HTTPS 下本地运行它时,我确实看到了它。

勘误表

  • 我正在访问的测试服务器确实有一个负载均衡器。
  • 当我在本地机器的 IIS 上调试它时,它可以工作,并且我确实看到正确的删除调用通过了mixed content all in每个 Fiddler 的 https` 没有问题。
  • 如上所述,托管控件的网站位于SUBSITE上述指定的主要(默认站点)之下的级别。
  • 上下文是通过传入一个 urlhttps://test.application.company.com/SUBSITE/WebService.svc而不是使用默认 in 来创建的ServiceReferences.ClientConfig
  • 上面使用的测试服务器上的证书是自签名证书,由于不受信任而存在问题。
  • 主站点和托管站点都有 clientaccesspolicy.xml 和 crossdomain.xml。

    <access-policy>
      <cross-domain-access>
        <!-- Silverlight 3 or higher requires the http-request-headers attribute. -->
        <policy>
          <allow-from http-request-headers="*" https-request-headers="*">
            <domain uri="https://*" />
            <domain uri="http://*" />
          </allow-from>
          <grant-to>
             <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
4

1 回答 1

0

答案在负载均衡器中。一旦平衡器使用 SSL 证书与 web 服务通信,混合模式页面就消失了。

于 2014-09-03T18:55:39.790 回答