c# - SOAP in php doesn't return values from MySql -


i working on webservice developed in php , mysql.
application developed in c# , wpf consuming services.

my soap server using pdo access database records.
problem
when try access webservice application no results database.
here example of c# application trying retrieve info:

bool result; try {     padr_api.padr_apiwsclient client = new padr_api.padr_apiwsclient();     string friends = client.getfirendslist(8);         } catch (exception ex) {     string = ex.message;//excuse attempt desperate find cause     throw; } return result;   

however in response test message.
here php code soap server:

public function getfirendslist($id){     $response = new getfreindslistresponse();     $response->return = 'test of message following ';     $response->return .= 'friends: ';     $pdo = new pdo('mysql:host=localhost;dbname=****', $user, $pwd);     $pdo->setattribute(pdo::attr_errmode, pdo::errmode_exception);     $stmt = $pdo->prepare("select id,friends padr_users id = :id");     $stmt->bindvalue(':id', $id, pdo::param_int);     $stmt->execute(); //        foreach ($stmt $row) { //            $response->return .= $row['friends']; //        }     while ($row = $stmt->fetch()) {         $response->return .= $row['friends'];     }     //$response->return = var_dump($stmt);     //$response->return = $pdo->errorinfo()[0];     //$response->return = $res;     return $response; } 

and here code of how set soap server:

$options=array('cache_wsdl'=> wsdl_cache_none); //create new soap server $server = new soapserver('padrapiws.wsdl', $options);//,$options //attach api class soap server $server->setclass('padr_apiws'); //start soap requests handler $server->handle(); 

i have tried using php soapclient

$options = array(//'location' => 'http://localhost/index.php',              'uri' => 'http://localhost/',             'trace' => 1,              'exceptions' => true,              'cache_wsdl' => wsdl_cache_none,              'features' => soap_single_element_arrays); $client = new soapclient('http://padr.orgfree.com/index.php?wsdl', $options); $client->__setlocation('http://padr.orgfree.com/index.php'); //var_dump($client); var_dump($client->__getfunctions()); var_dump($client->__gettypes()); $res = $client->getfirendslist(array('id'=> 8)); var_dump($res); 

what interesting when use code in php file without soap query returns result fine. want through soap test of message following friends:.
have little experience php , honest don't know fault is? have been following few tutorials creating soap wsdl , php documentation.
last 1 didn't provide insight on issue , honest don't know how describe issue because don't know lies.
p.s. here result client:

array(5) { [0]=> string(65) "getfirendslistresponse getfirendslist(getfirendslist $parameters)" [1]=> string(68) "updateipaddressresponse updateipaddress(updateipaddress $parameters)" [2]=> string(74) "checkifregisteredresponse checkifregistered(checkifregistered $parameters)" [3]=> string(47) "registerresponse register(register $parameters)" [4]=> string(50) "addfriendresponse addfriend(addfriend $parameters)" } array(10) { [0]=> string(53) "struct addfriend { string nickname; int friendid; }" [1]=> string(45) "struct addfriendresponse { boolean return; }" [2]=> string(34) "struct getfirendslist { int id; }" [3]=> string(49) "struct getfirendslistresponse { string return; }" [4]=> string(46) "struct checkifregistered { string nickname; }" [5]=> string(53) "struct checkifregisteredresponse { boolean return; }" [6]=> string(63) "struct updateipaddress { string nickname; string ipaddress; }" [7]=> string(51) "struct updateipaddressresponse { boolean return; }" [8]=> string(56) "struct register { string nickname; string ipaddress; }" [9]=> string(44) "struct registerresponse { boolean return; }" } object(stdclass)#2 (1) { ["return"]=> string(42) "test of message following friends: " }

the final answer problem soap ws using soap envelope transferring messages client server.
has worked was
$request = array('id' => array('value'=> 21)); $res = $client->getfirendslist($request);
wsdl method looks this:

<message name="getfirendslist">     <part name="parameters" element="tns:getfirendslist"/> </message> <message name="getfirendslistresponse">     <part name="parameters" element="tns:getfirendslistresponse"/> </message> <operation name="getfirendslist">   <input wsam:action="http://wsdl.example.org/padr_apiws/getfirendslistrequest" message="tns:getfirendslist"/>   <output wsam:action="http://wsdl.example.org/padr_apiws/getfirendslistresponse" message="tns:getfirendslistresponse"/> </operation> <operation name="getfirendslist">   <soap:operation soapaction=""/>   <input>     <soap:body use="literal"/>   </input>   <output>     <soap:body use="literal"/>   </output> </operation>   

and xsd file:

<xs:complextype name="getfirendslist"> <xs:sequence>   <xs:element name="value" type="xs:int"/> </xs:sequence> 

sorry extensive xml.
, here c# code:

padr_api.getfirendslist request = new padr_api.getfirendslist(); request.value = 8; client.getfirendslist(request);   

all works.
conclusion
lesson learned if want send int or other primitive type need envelope in object treated soap envelope.
soap server requires response type has defined on server side so:

class getgetfirendslistresponse {     public $return; }   

Comments

Popular posts from this blog

sequelize.js - Sequelize group by with association includes id -

android - Robolectric "INTERNET permission is required" -

java - Android raising EPERM (Operation not permitted) when attempting to send UDP packet after network connection -