0

我想在这里得到一点帮助。

我正在尝试使用 Zend 从 PHP 向 .NET SOAP 服务器发送请求。

我有 WSDL 文件,但它不包含任何标题信息。尽管我尝试添加自定义标头,但这似乎不起作用,最糟糕的是 WSDL 文件本身似乎并不“正确”.....

这是链接:http ://www.speedex.gr/getvoutrans/getvoutrans.asmx 可以通过添加 ?WSDL 在同一链接中找到 WSDL

我的要求是:GetVouTrans

提前谢谢!

4

1 回答 1

0

http://www.speedex.gr/getvoutrans/getvoutrans.asmx?op=GetVouTrans url 显示了预期的请求。

如果您将覆盖SoapClient::__doRequest函数,您可以检查您发送的内容。
(不要忘记调用父级::__doRequest())

您甚至可以更改 xml以进行 .net 特定的更改。

糟糕的是,SOAP 并不总是在不同语言之间开箱即用。
我遇到了 php 5.2.0 (debian) 和 java soap-server 的问题,当我升级到 php 版本 5.2.8 时问题就消失了

__doRequest 联机帮助页上的评论表明:

class MSSoapClient extends SoapClient {

  function __doRequest($request, $location, $action, $version) {
    $namespace = "http://tempuri.com";

    $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1);
    $request = preg_replace('/<ns1:(\w+)/', '<$1', $request);
    $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request);

    // parent call
    return parent::__doRequest($request, $location, $action, $version);
  }
}

$client = new MSSoapClient(...);

但此评论来自 2007 年,因此您的里程可能会有所不同。

于 2010-06-08T19:48:50.993 回答