У меня проблема с вызовом .net веб-сервисов от android используя ksoap2. Вызов выполняется просто отлично без параметров, но когда я передаю параметры любого типа, веб-служба просто получает нулевое значение. Я пробовал все возможное, но пока не повезло. я надеюсь кто-то может помочь, Код на стороне клиента:
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);
.....
}
.....
У меня была эта проблема, и я мог ее решить. Для его решения вы должны учитывать следующую настройку:
мой url был: "http://" + "MyIP: 80/PathTraceWS/SetPathToServer.asmx" (Я показал URL-адрес, как указано выше, из-за проверки стекирования)
Действие веб-службы: SetDatap >
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-адрес системы
Просто отлично работай для меня таким образом...
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..
Если у вас есть контроль над веб-сервисом, попробуйте удалить http://
из вашего имени пространства имен в webservice (и обновить все ваши ссылки в вашем Java-коде). Это не решение, если это не ваш собственный веб-сервис, который вы потребляете (для этого вы можете попробовать это обходное решение), но в противном случае это кажется хорошо работайте.