我有一个带有登录操作的WCF Web服务,它将公司名称,用户名和密码作为三个参数。我正在尝试创建一个PHP客户端应用程序来与此服务进行通信。无论我传递给Login操作,我都会收到以下错误:
OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name 'Login' and namespace ''. Found node type 'Element' with name 'parameters' and namespace ''
我的客户端应用:
<?php
try
{
$client = new SoapClient("https://somewhere.com/DataServiceRxPublic.svc?wsdl");
//$params = array(
// 'parameters' => array(
// 'Param' => array(
// array('Name' => 'loginCompany', 'Value' => 'XXX'),
// array('Name' => 'loginId', 'Value' => 'XXX'),
// array('Name' => 'loginPwd', 'Value' => 'XXX')
//)));
//$params = array(
// 'Login' => array(
// array('Name' => 'loginCompany', 'Value' => 'XXX'),
// array('Name' => 'loginId', 'Value' => 'XXX'),
// array('Name' => 'loginPwd', 'Value' => 'XXX')
//));
//$params = array(
// 'Login' => array(
// 'parameters' => array(
// array('Name' => 'loginCompany', 'Value' => 'XXX'),
// array('Name' => 'loginId', 'Value' => 'XXX'),
// array('Name' => 'loginPwd', 'Value' => 'XXX')
//)));
//$params = array(
// array('Name' => 'loginCompany', 'Value' => 'XXX'),
// array('Name' => 'loginId', 'Value' => 'XXX'),
// array('Name' => 'loginPwd', 'Value' => 'XXX')
//);
$params = array(
'loginCompany' => 'XXX',
'loginId' => 'XXX',
'loginPwd' => 'XXX'
);
$obj->loginCompany = 'XXX';
$obj->loginId = 'XXX';
$obj->loginPwd = 'XXX';
//$result = $client->Login($obj);
//$result = $client->Login($params);
}
catch (Exception $e)
{
print_r($e);
}
}
?>
$ params是不同的数组排列我在网上基于几个不同的例子。
感谢任何帮助。
答案 0 :(得分:0)
错误消息告诉您应该有一个名为“Login”的东西,但是被命名为“parameters”。
Go get SoapUI并使用您的WSDL按照我描述的here步骤来调试您实际发送的内容。如果您无法比较服务期望与发送的内容之间的差异,那将会出现过多的反复试验。
如果您需要更多外部帮助,我们需要WSDL资源 - 没有它,没有人知道预期的请求结构。
答案 1 :(得分:0)
结果我需要扩展SOAPClient并覆盖__doRequest()方法来替换不匹配的soap标头。
答案 2 :(得分:0)
我设法通过修改服务器端的服务命名空间来修复此错误。
or
命名空间之前是空的。