C# struct and NuSOAP(php)

Posted by opx on Stack Overflow See other posts from Stack Overflow or by opx
Published on 2009-07-16T13:48:43Z Indexed on 2010/04/14 0:03 UTC
Read the original article Hit count: 625

Filed under:
|
|

Hello

Im trying to build a client in c# that talks with some remote (php)server with SOAP using the NuSOAP library. Here im using a struct/object that will containt the user info of some user:

public struct UserProfile {
            public string username;
            public string password;
            public string email;
            public string site;
            public string signature;
            public int age;
            public int points;

And this is the PHP Code:

server->wsdl->addComplexType(
    			'UserProfile',
    			'complexType',
    			'struct',
    			'all',
    			'',
    			array(
    				'username' => array('name' => 'username', 'type' => 'xsd:string'),
    				'password' => array('name' => 'password', 'type' => 'xsd:string'),
    				'email' => array('name' => 'email', 'type' => 'xsd:string'),
    				'site' => array('name' => 'site', 'type' => 'xsd:string'),
    				'signature' => array('name' => 'signature', 'type' => 'xsd:string'),
    				'age' => array('name' => 'age', 'type' => 'xsd:int'),
    				'points' => array('name' => 'username', 'type' => 'xsd:int'),
    			)
);

$server->wsdl->addComplexType(
    			'UserProfileArray',
    			'complexType',
    			'array',
    			'',
    			'SOAP-ENC:Array',
    			array(),
    			array(array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:UserProfile[]')),
    			'tns:UserProfile'
);

$server->register("getUserProfile",
    array(),
    array('return' => 'tns:UserProfileArray'),
    $namespace,
    false,
    'rpc',
    false,
    'Get the user profile object'
);

function getUserProfile(){
    $profile['username'] = "user";
    $profile['password'] = "pass";
    $profile['email'] = "usern@ame";
    $profile['site'] = "u.com";
    $profile['signature'] = "usucsdckme";
    $profile['age'] = 111;
    $profile['points'] = time() / 2444;

    return $profile;
}

Now I already have a working login function, and I want to get the info about the logged in user but I dont know howto obtain these. This is what im using to get the userinfo:

            string user = txtUser.Text;
            string pass = txtPass.Text;
            SimpleService.SimpleService service = new SimpleService.SimpleService();
            if(service.login(user, pass)){
                 //logged in

            }

            SoapApp.SimpleService.UserProfile[] user = service.getUserProfile(); // THIS LINE GIVES ME AN EXCEPTION

            MessageBox.Show(user[0].username + "--" + user[0].points);

The getUserProfile() function produces an error:

System.Web.Services.Protocols.SoapException was unhandled
  Message="unable to serialize result"
  Source="System.Web.Services"

or I get something like 'cant parse xml' error.

The article I used for this was from: http://www.sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html The difference on what they are doing and what I try to do is that I only want to get one object returned instead of multiple 'MySoapObjects'.

I hope someone is familiar with this and could help me, thanks in advance! Regards, opx

© Stack Overflow or respective owner

Related posts about c#

Related posts about php