2009-12-09 4 views
1

У меня возникла проблема при вызове .net веб-сервисов от android с использованием ksoap2. Вызов выполняется просто отлично без параметров, но , когда я передаю параметры любого типа, веб-служба просто получает нулевое значение . Я пробовал все возможное, но пока не повезло. Я надеюсь, что кто-то может помочь, стороны кода клиента:Передача параметров с использованием ksoap2 в .net веб-службу, всегда передает значения null (0)

public static boolean temp(){ 
      try { 

      SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME_TEMP); 
      PopertyInfo p = new PropertyInfo(); 
      p.type = PropertyInfo.INTEGER_CLASS; 
      p.setName("num"); 
      p.setValue(5); 
      p.setNamespace(NAMESPACE); 
      request.addProperty(p) ; 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      envelope.encodingStyle = SoapSerializationEnvelope.ENC; 
      envelope.setOutputSoapObject(request); 
      AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport (URL); 
      androidHttpTransport.call(SOAP_ACTION_TEMP, envelope); 
    ..... 
      } 

    ..... 

ответ

1

Просто отлично работает для меня таким образом ...

SoapObject requete = new SoapObject(NAMESPACE, METHOD_NAME); 

PropertyInfo propertyInfo = new PropertyInfo(); 
propertyInfo.type = PropertyInfo.INTEGER_CLASS; 
propertyInfo.name = "value"; 
requete.addProperty(propertyInfo, 2); 

SoapSerializationEnvelope enveloppe = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
enveloppe.dotNet = true; 
enveloppe.setOutputSoapObject(requete); 

Моего Soap сервером является службой WCF. Клиент является эмулятором android с использованием Ksoap ..

0

Если у вас есть контроль над веб-сервисом, попробуйте удалить http:// из вашего имени пространства имен в webservice (и обновить все ваши ссылки в вашем Java-коде). Это не решение, если вы не используете свой собственный веб-сервис (для этого вы можете попробовать this workaround), но в противном случае он работает нормально.

1

У меня была эта проблема, и я мог ее решить. Для ее решения необходимо учитывать следующие параметры:

мой URL был: "HTTP: //" + "MyIP: 80/PathTraceWS/SetPathToServer.asmx" (я показал URL, как описано выше из-за проверки StackOverflow)

действие веб-сервис был: SetData

String SOAP_ACTION= "http://"+"tempuri.org/SetData"; 
    String OPERATION_NAME="SetData"; 
    String WSDL_TARGET_NAMESPACE="http://"+tempuri.org/"; 
    String SOAP_ADDRESS="http://"+"192.168.1.54:80/PathTraceWS/SetPathToServer.asmx"; 

Я считаю, что если вы установите вышеуказанные параметры правильно, ваша проблема рассосется. Мои проблемы были:

1- установить WSDL_TARGET_NAMESPACE на "HTTP: //" + "tempuri.org" не "HTTP: //" + "tempuri.org/"

2- Если вы вызывать веб-службу с помощью мобильного эмулятора Android, вы не должны использовать localhost, и вместо этого вы должны использовать свою систему IP