Я пытаюсь создать клиент на c #, который общается с каким-нибудь удаленным (php) сервером с помощью SOAP с использованием библиотеки NuSOAP.
Здесь я использую структуру / объект, который будет содержать информацию о пользователе какого-то пользователя:
public struct UserProfile {
public string username;
public string password;
public string email;
public string site;
public string signature;
public int age;
public int points;
А это код PHP:
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;
}
Теперь у меня уже есть работающая функция входа в систему, и я хочу получить информацию о зарегистрированном пользователе, но я не знаю, как их получить. Это то, что я использую, чтобы получить 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);
Функция getUserProfile () выдает ошибку:
System.Web.Services.Protocols.SoapException was unhandled
Message="unable to serialize result"
Source="System.Web.Services"
или я получаю что-то вроде ошибки 'cant parse xml'.
Статья, которую я использовал для этого, была от: http://www.sanity -free.org / 125 / php_webservices_and_csharp_dotnet_soap_clients.html
Разница в том, что они делают, и в том, что я пытаюсь сделать, заключается в том, что я хочу получить только один возвращенный объект вместо нескольких «MySoapObjects».
Я надеюсь, что кто-то знаком с этим и может мне помочь, заранее спасибо!
С Уважением,
Opx