我有一个用。net 4.0编写的WCF服务,它接受两个参数。一个是由User、MerchantName和Password组成的复杂类型,第二个变量是int型。该服务返回第三个复杂类型。
它的结构如下所示:
// * c#代码 *
public sub AccountData Log(Login LoginData, int AccountID)
{
//do stuff here
}
使用SoapClient并从c#服务中删除int AccountID,我可以成功地传递复杂数据并解析复杂数据输出。增加AccountID参数,打破soap呼叫。我似乎不能以WCF接受的方式将这些变量组合成一个数组。
问题是如何形成数组来传递调用?
我已经试过了:
//****Attempt one *******
$login = array('MerchantName' => 'merchantA',
'User' => 'userA',
'password' => 'passwordA');
$account = '68115'; //(also tried $account = 68115; and $account = (int)68115;)
$params = array('LoginData' => $login, 'AccountID' => $account);
$send = (object)$params; //Have tried sending as an object and not.
$client = new SoapClient($wsdl);
$client->soap_defencoding = 'UTF-8';
$result = $client->__soapCall('Log', array($send);
var_dump($send);
echo("<pre>");
var_dump($result);
最近的尝试是对变量进行分类,但我在试图形成$client调用时卡住了。
class LogVar
{
public $MerchantName;
public $User;
public $Password;
}
class AccountID
{
public $AccountID;
}
$classLogin = new LogVar();
$classLogin->MerchantName = 'merchantA';
$classLogin->User = 'userA';
$classLogin->Password = 'passwordA';
$classAccount = new AccountID();
$classAccount->AccountID = '68115';
//How to get to $client->__soapCall('Log', ???????);
注:我是一个。net程序员,请友好的PHP解释…此外,nussoap似乎也没有好到哪里去,不过它可能有一些未被发现的处理复杂类型的方法。
这在我使用标准SoapClient时有效:
$client = new SoapClient($wsdl, array('trace' => true));
$data = $client->Log(array('AccountID' => 23, 'LoginData' => array('User' => '123', 'Password' => '123', 'MerchantName' => '123')));
// echo $client->__getLastRequest();
var_dump($data);
您可以显示最后一个请求XML,并将其与WCF客户机生成的内容进行比较。我是这样弄清楚的:我生成了一个WCF客户端,检查了它生成的XML消息,并与$client->__getLastRequest进行了比较。
注意:您可以在SoapClient上通过其名称调用方法,而不是使用$client->__soapCall('operationName')