【发布时间】:2013-04-04 18:41:23
【问题描述】:
我有一个需要连接到 https 网络服务的 Flex 应用程序。 Web 服务 WSDL URL 以 wsdl-url.company.com 的形式给出,其中使用了 SSL 卸载。
Flex 应用程序与 Web 服务驻留在同一台服务器上。
在mxml中定义的web服务为
<s:WebService id="webService" wsdl="https://wsdl-url.company.com/service.asmx?wsdl">
服务器根目录下的crossdomain.xml文件是
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM /xml/dtds/cross-domain-policy.dtd>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
如果从 HTTPS 地址加载 swf,则在页面加载(Web 服务初始化)时,swf 不会请求 crossdomain.xml,但是当调用 Web 服务时,会尝试对 http 等效项而不是 https .
即使用 Firebug,我看到 Flex 正在执行 POST 到 ,这应该是 HTTPS。为什么 Flex 声明为 https 时将其更改为 http?
另一方面,如果在同一台服务器上从 HTTP 加载 swf,则会下载 crossdomain.xml,但 Flash 调试器会抛出“Channel.Security.Error”,并且当 Web 服务尝试时应用程序崩溃进行初始化。
非常感谢任何解决此问题的帮助。
【问题讨论】:
-
向我们展示您实际执行帖子的代码。与 SWF 加载相关的“Web 服务初始化”如何?在代码对域进行服务调用之前,SWF 不会请求 crossdomain.xml 文件。
-
使用上面显示的 s:WebService 标记声明 Web 服务,并在加载 swf 后立即初始化。此时会抛出 Channel.Security.Error(如果我通过 HTTP URL 加载 swf)。如果我通过 HTTPS URL 加载 swf,则不存在此问题,但是对 Web 服务的任何调用都会导致 Flash 将 http 放置到声明的 Web 服务而不是 https。调用 Web 服务的代码是 webService.Authenticate(USERNAME, PASSWORD),添加 SOAP 标头后。
标签: web-services apache-flex https wsdl crossdomain.xml