Отправка сложного типа в запросе ksoap на веб-сервис Wcf - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь подключиться к веб-сервису Wcf из Android-клиента. Мой клиент работает нормально с простыми типами данных, но когда я пытаюсь вызвать сложные данные, это вызывает проблемы. Я сделал это:

 Credentials credentials=new Credentials();
  credentials.Username="xyz";
  credentials.Password="123";
  PropertyInfo info=new PropertyInfo();
  info.setName("credentials"); 
  info.setValue(credentials);               
  info.setNamespace(NAMESPACE);
  info.setType(new Credentials().getClass());
  request.addProperty(info);


                    SoapSerializationEnvelope envelope = 
                            new SoapSerializationEnvelope(SoapEnvelope.VER11);
                    envelope.dotNet = true;
                    envelope.setOutputSoapObject(request);


                    HttpTransportSE httpTransport = new HttpTransportSE(URL);
                    Object response=null;
                    httpTransport.call(SOAP_ACTION, envelope);
                    response = envelope.getResponse();

Здесь всякий раз, когда я отправляю учетные данные, не делая info.setValue (учетные данные), я могу отправить запрос на сервер, но поле имени пользователя и пароля остается пустым. В случае добавления этого info.setValue (учетные данные) я получаю ошибку eserilization. Я потратил 2-3 дня на это, пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 февраля 2012

Я получил решение для моего вопроса. Я заметил запрос, сгенерированный в клиенте Java и Android.

Java-клиент

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body><ns4:myfunction xmlns:ns4="http://tempuri.org/">
<ns4:newMobile>91----------</ns4:newMobile>
<ns4:countryId>1</ns4:countryId>
<ns4:credentials>
<ns2:Password xmlns:ns2="http://schemas.datacontract.org/2004/07/mycompanyWebService.Models">123</ns2:Password>
<ns2:Username xmlns:ns2="http://schemas.datacontract.org/2004/07/mycompanyWebService.Models">xyz</ns2:Username></ns4:credentials>
</ns4:myfunction>
</soapenv:Body>
</soapenv:Envelope>

Android Client

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body>
<myfunction xmlns="http://tempuri.org/" id="o0" c:root="1">
<Mobile i:type="d:string">91----------</Mobile>
<countryId i:type="d:string">1</countryId>
<credentials i:type="d:anyType">
<Username i:type="d:string">hm.1</Username>
<Password i:type="d:string">123</Password></credentials>
</myfunction>
</v:Body>
</v:Envelope>

В случае Java-клиента он работал, но не в Android, поэтому я использовал маршалинг для изменения начального и конечного тегов, и это сработало для меня.

...