我想用php/soap使用WSDL web服务。它总是给出一个反序列化错误,它正是:PHP/SOAP不创建所需的XML请求
反序列化操作'Test'的请求消息体的错误。 OperationFormatter遇到无效的消息体。预期会找到名称为'Test'和命名空间''的节点类型'Element'。找到名为'parameters'和'namespace'的节点类型'Element'
当我使用WcfTestClient软件测试WSDL源代码时,没有任何问题,它返回所需的结果。
当我比较由SOAP创建的请求XML和由WcfTestClient软件创建的XML时,我发现这种差异可能是问题所在。它看起来像名称空间和前缀有问题,但我不知道如何解决它,或者它可能是其他问题导致的问题。
请求XML是这样的:http://pastebin.com/eysnG89F。
如果您需要PHP代码,this is the code I am using。
try{
$soap_options = array(
'soap_version' => SOAP_1_1,
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => TRUE
);
$soap = new SoapClient(
'http://url.to/web/service.svc?wsdl', $soap_options
);
$a = $soap->Test(
array("login" =>
array(
"FirmaId" => 15,
"KullaniciAdi" => "Asdf",
"Parola" => "Xyxy",
)
)
);
var_dump($a);
} catch (Exception $e) {
var_dump($e);
}
您的PHP代码丢失。此外,WSDL URI缺失。每个元素都有一个*不同的*名称,这导致了一些根本错误的假设。就像不在您的SOAP客户端中使用WSDL一样? –
编辑添加PHP代码。我不能提供确切的服务网址,对不起。我使用了肥皂1,因为肥皂2给出的内容类型错误是'无法处理消息,因为内容类型'application/soap + xml;字符集= UTF-8; action =“urn:VWService/Test”'不是预期的类型'text/xml; charset = utf-8' – Erdi
这个XML仍然丢失:'http://url.to/web/service.svc?wsdl'(WSDL文档) –