HTTPS中的Web服务请求在会话中间作为HTTP定向到clientaccesspolicy



我正在开发一个Silverlight 5应用程序,它能够使用wcf web服务获取数据。但是,一旦尝试保存或删除,就会请求clientaccessppolicy .xml文件。这个请求发生在HTTP协议中,然后浏览器报告Display mixed content javascript弹出对话框。异步调用(如BeginSaveChanges)静默失败,在回调中没有得到错误消息。为什么这个通过HTTPS工作和获取数据的应用程序突然想要客户端访问策略文件,然后一切都停止了?

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

Fiddler Session Capture

#   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中看到实际的web服务调用,但当我在HTTPS下本地运行它时,我确实看到了它。

勘误表

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

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

相关内容

  • 没有找到相关文章

最新更新