ksoap2 - параметры запроса всегда отсутствуют - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть веб-сервис ASP.Net, который прекрасно работает из кода SOAP iPhone или другого клиента .Net. Однако, когда я пытаюсь использовать Ksoap2, параметры, передаваемые службе, не устанавливаются. В сервисе параметр «AuthenticationID» не должен входить, потому что первое, что делает WebMethod, это проверяет, является ли строка нулевой или пустой, и возвращает ответ «AuthenticationFailure». Я получил этот ответ, поэтому я знаю, что с SOAP все в порядке, просто параметр не передается.

public SoapObject soap(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL) throws IOException, XmlPullParserException {
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      request.addProperty("AuthenticationID", "5");       
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true;
      envelope.setOutputSoapObject(request);  
      HttpTransportSE httpTransport = new HttpTransportSE(URL);  
      httpTransport.debug = true;  
      httpTransport.call(SOAP_ACTION, envelope); 
      SoapObject result=(SoapObject)envelope.getResponse(); 
      return result;
  }

И WSDL выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <LookupStores xmlns="http://blah.com/Services/">
          <AuthenticationID>string</AuthenticationID>
          <NameMatch>string</NameMatch>
        </LookupStores>
      </soap:Body>
    </soap:Envelope>

Пожалуйста, дайте мне несколько вещей, чтобы попробовать это просто простая служба, и я подумал, что будет легко потреблять с помощью KSoap2. Спасибо!

Ответы [ 2 ]

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

Первое, что вам нужно проверить, это то, что строка пространства имен в WebService и в вашем Android-приложении в точности совпадают

0 голосов
/ 23 декабря 2010

У меня была похожая проблема, и я смог передать свой параметр с помощью PropertyInfo. Попробуйте приведенный ниже код, нет гарантии, что он будет работать, но стоит попробовать.

public SoapObject soap(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL) throws IOException, XmlPullParserException 
{
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    PropertyInfo pi = new PropertyInfo();
    pi.setName("int"); //change to appropriate type e.g. String
    pi.setValue(5); // if sString add the speech marks e.g. "5"
    pi.setType("AuthenticationID".getClass());                  
    request.addProperty(pi);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);  
    HttpTransportSE httpTransport = new HttpTransportSE(URL);  
    httpTransport.debug = true;  
    httpTransport.call(SOAP_ACTION, envelope); 
    SoapObject result=(SoapObject)envelope.getResponse(); 
    return result;
}  

Надеюсь, это поможет.

...