0

我将用于 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_wsdlwsf_wsdl.php数据,收集的数据看起来不错。

我已经挖掘了大多数似乎至少触及我的问题的 wso2 论坛主题,但没有什么与此完全对应。对于问题所在以及如何解决问题,我真的没有办法了。使用其设置数组设置 WSClient 时,我是否遗漏了什么?

4

1 回答 1

0

text/xml 是 SOAP 1.1 的内容类型,application/soap+xml 是soap1.2 的内容类型,由于您将soap 版本设置为soap12,因此消息很可能作为soap12 消息发送。

从您指定的错误来看,在我看来,消息未能到达端点。您能否检查 wsdl 中指定的端点是否正确。或者您可以在客户端选项数组中指定端点。

于 2012-05-15T09:52:56.130 回答