我将用于 PHP 的 Wso2 Web 服务框架 (WSF) 与 Zend Server CE 5.5 一起使用,由于某种原因,在与 Web 服务的连接阶段的最后阶段会出现问题。
Web 服务(我相信内置于 .NET)通过 HTTPS 接受调用,无需用户/密码身份验证,也无需客户端证书。我还将 WSDL 与 WSClient 一起使用。
因此,在连接时,我只需设置以下参数:
$settings = array(
"wsdl" => realpath(dirname(__FILE__) . "/resources/wsdl.xml"),
"classmap" => $classMap, // classMap maps the WSDL names to corresponding PHP classes
"CACert" => realpath(dirname(__FILE__) . "/resources/cert.pem"),
"timeout" => 40,
"useSOAP" => "1.2",
"useWSA" => 1.0
);
在 WSDL 中找到的策略如下:
<wsp:Policy wsu:Id="BasicHttpBinding_IApplication_policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
</wsp:Policy>
</sp:TransportBinding>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
在wsf_php_client.log
我发现没有建立任何联系,但很难准确指出问题所在。[info]
日志中的行是[error]
后来启动的吗?
[warning] msg_ctx.c(1384) RampartClientConfiguration not set in message context
[info] [ssl client] Client certificate chain filenot specified
[error] http_sender.c(1355) Error occurred in transport
[error] engine.c(171) Transport sender invoke failed
[error] wso2-wsf-php-src-2.1.0/src/wsf_wsdl.c(1226) [wsf_wsdl] Response envelope not found
在每个阶段,一切看起来都很好。我查看了函数返回wsf_process_wsdl
的wsf_wsdl.php
数据,收集的数据看起来不错。
我已经挖掘了大多数似乎至少触及我的问题的 wso2 论坛主题,但没有什么与此完全对应。对于问题所在以及如何解决问题,我真的没有办法了。使用其设置数组设置 WSClient 时,我是否遗漏了什么?