fa_karoon
چهارشنبه 25 دی 1392, 09:41 صبح
سلام دوستان
این موضوع رو خیلی تو سایت های مختلف جستجو کردم اما به نتیجه ای نرسیدم تا اینکه با تست و بررسی های خودم به جواب رسیدم نمونه کد رو براتون می ذارم:
اگه می خواید آرایه به ورودی تون بفرستید و یه آرایه هم خروجی بگیرید قسمت complextype و register رو اینجوری باید تعریف کنید:
$server->wsdl->addComplexType(
'outQuery',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array(
'ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'xsd:int[]'
)
)
);
$server->register(
'Query', // Method Name
array('user' => 'xsd:string','pass' => 'xsd:string','msgIds'=>'tns:outQuery'), //Input Parameters
array('return' => 'tns:outQuery'), // Output Parameters
$ns, // Namespace
$ns . '#Query', // SOAPAction
'rpc', // Style
'encoded', // Use
'Get specific user info' // Documentation
);
به قسمت 'msgIds'=>'tns:outQuery' برای ورودی آرایه توجه کنید.
-------------------
برای اینکه خروجی رو هم یه آرایه ی بدون نام و بدون محدودیت طول بتونید تعریف کنید از همون complextype بالا می تونید استفاده کنید
برای رجیسترش هم در کد قبل به قسمت خروجیش که نوشته 'return' => 'tns:outQuery' باید دقت کنید.
تابع query مون هم می تونه این شکلی باشه:
function Query($user,$pass,$msgIds)
{
$queryIds = implode(',', $msgIds);
$sql = "SELECT status FROM trafficWHERE id='?' AND id in(?)";
$res = $db->doQuery($sql, array($info['id'], $queryIds));
foreach ($res as $row) {
$result[]=$row;
}
return $result;
}
البته این یه نمونه تستی هست ممکنه تابعمون خیلی پیچیده تر از این حرف ها باشه.
سمت کلاینت هم می تونید اینجوری صداش بزنید و خروجی رو چاپ کنید:
$msgIds=array(7384233,7384234,7396959);
$parameters = array('user' => '123','pass' =>'123','msgIds' => $msgIds);
$result =$client->call('Query', $parameters);
foreach ($result as $item) {
echo $item .'<br />';
}
امیدوارم مفید بوده باشه، موفق باشید
----------
پاورقی این پست در ابتدا اشکال داشت و تو دات نت اضافه نمی شد، اما بعد حل مشکل این پست هم اصلاح شد با خیال راحت کد رو استفاده کنید.
این موضوع رو خیلی تو سایت های مختلف جستجو کردم اما به نتیجه ای نرسیدم تا اینکه با تست و بررسی های خودم به جواب رسیدم نمونه کد رو براتون می ذارم:
اگه می خواید آرایه به ورودی تون بفرستید و یه آرایه هم خروجی بگیرید قسمت complextype و register رو اینجوری باید تعریف کنید:
$server->wsdl->addComplexType(
'outQuery',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array(
'ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'xsd:int[]'
)
)
);
$server->register(
'Query', // Method Name
array('user' => 'xsd:string','pass' => 'xsd:string','msgIds'=>'tns:outQuery'), //Input Parameters
array('return' => 'tns:outQuery'), // Output Parameters
$ns, // Namespace
$ns . '#Query', // SOAPAction
'rpc', // Style
'encoded', // Use
'Get specific user info' // Documentation
);
به قسمت 'msgIds'=>'tns:outQuery' برای ورودی آرایه توجه کنید.
-------------------
برای اینکه خروجی رو هم یه آرایه ی بدون نام و بدون محدودیت طول بتونید تعریف کنید از همون complextype بالا می تونید استفاده کنید
برای رجیسترش هم در کد قبل به قسمت خروجیش که نوشته 'return' => 'tns:outQuery' باید دقت کنید.
تابع query مون هم می تونه این شکلی باشه:
function Query($user,$pass,$msgIds)
{
$queryIds = implode(',', $msgIds);
$sql = "SELECT status FROM trafficWHERE id='?' AND id in(?)";
$res = $db->doQuery($sql, array($info['id'], $queryIds));
foreach ($res as $row) {
$result[]=$row;
}
return $result;
}
البته این یه نمونه تستی هست ممکنه تابعمون خیلی پیچیده تر از این حرف ها باشه.
سمت کلاینت هم می تونید اینجوری صداش بزنید و خروجی رو چاپ کنید:
$msgIds=array(7384233,7384234,7396959);
$parameters = array('user' => '123','pass' =>'123','msgIds' => $msgIds);
$result =$client->call('Query', $parameters);
foreach ($result as $item) {
echo $item .'<br />';
}
امیدوارم مفید بوده باشه، موفق باشید
----------
پاورقی این پست در ابتدا اشکال داشت و تو دات نت اضافه نمی شد، اما بعد حل مشکل این پست هم اصلاح شد با خیال راحت کد رو استفاده کنید.