我想在这里得到一些帮助。
我正在尝试使用Zend从PHP向.NET SOAP服务器发送请求。
我有WSDL文件,但它不包含任何标头信息。 虽然我试图添加一个自定义标题,但这似乎不起作用,最糟糕的是 WSDL文件本身似乎并不“正确”.....
以下是链接:http://www.speedex.gr/getvoutrans/getvoutrans.asmx 通过添加?WSDL
可以在同一链接中找到WSDL我的要求是:GetVouTrans
提前Thanx!
答案 0 :(得分:0)
http://www.speedex.gr/getvoutrans/getvoutrans.asmx?op=GetVouTrans网址会显示预期的请求。
如果您要覆盖SoapClient::__doRequest功能,则可以查看发送的内容 (别忘了调用parent :: __ 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年开始的,所以你的里程可能会有所不同。