我想在这里得到一点帮助。
我正在尝试使用 Zend 从 PHP 向 .NET SOAP 服务器发送请求。
我有 WSDL 文件,但它不包含任何标题信息。尽管我尝试添加自定义标头,但这似乎不起作用,最糟糕的是 WSDL 文件本身似乎并不“正确”.....
这是链接:http ://www.speedex.gr/getvoutrans/getvoutrans.asmx 可以通过添加 ?WSDL 在同一链接中找到 WSDL
我的要求是:GetVouTrans
提前谢谢!
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 年,因此您的里程可能会有所不同。