2011-09-07 36 views
0

我有一个用.NET 4.0写的接受两个参数的WCF服务。一种是由User,MerchantName和Password组成的复杂类型,第二个变量是int。该服务返回第三种复杂类型。用PHP调用WCF - 变量结构

它的结构如下所示:

// *C#代码 *

public sub AccountData Log(Login LoginData, int AccountID) 
{ 
    //do stuff here 
} 

使用SoapClient的和删除从C#的服务INT帐户ID,我可以通过复杂的数据输入和解析通过复杂的数据输出成功。添加AccountID参数,打破肥皂呼叫。我似乎无法以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); 

最新的尝试是类变量,但特林形成到$客户打电话时我被困。

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', ???????); 

P.S.我是一个.Net编码器,请善待PHP解释...另外,NuSoap看起来并不好,但它可能没有发现处理复杂类型的方法。

回答

0

这为我工作标准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')