用PHP调用WCF——变量结构


Calling WCF with PHP -- variable structures

我有一个用。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')