将ksoap请求中的复杂类型发送到Wcf Web服务

时间:2012-02-13 15:51:47

标签: android wcf android-ksoap2

我正在尝试从android客户端连接到Wcf web服务。我的客户端工作正常,只有简单的数据类型但是当我试图调用复杂的数据时,它会给出问题。 我这样做了:

 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 :(得分:0)

我得到了我的问题的解决方案。我注意到在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客户端

<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中,所以我使用编组来更改开始标记和结束标记,它对我有用。