По-видимому, это довольно часто встречающаяся проблема. Я не совсем уверен, где проблема, или что нужно скорректировать, но для жизни я не могу получить ничего, кроме результата NULL, в мой SoapObject или SoapPrimitive из моей веб-службы .NET XML с параметрами.Android, KSoap2 и веб-служба .NET с параметрами = результат NULL
Я пробовал все, что я нашел в сети:
- Добавление .setXmlVersionTag = без изменений
- Использование SoapObject вместо SoapPrimitive = без изменений
- Использование SoapPrimitive вместо SoapObject = без изменений
- Использование HttpTransportSE вместо AndroidHttppTransport = без изменений
- Использование AndroidHttpTransport вместо HttpTransportSE = без изменений
- Установка .dotNet = истина = без изменений
- Удаление назначения линии .dotNet = без изменений
- Удаление толстой кишки (весь HTTP: // префикс) из веб-службы = без изменений
- Использование класса PropertyInfo вместо прямого присваивания = без изменений
- не Использование прямого назначения вместо класса PropertyInfo = без изменений
Я в полной потери, и это довольно сложно. Я полностью контролирую веб-службу (я ее написал), поэтому незначительные изменения, если они мне полезны, я готов попробовать.
В настоящее время мой код следующим образом заключается в следующем:
public void GetResults()
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("lastName", "sm");
request.addProperty("middleName", "");
request.addProperty("firstName", "");
request.addProperty("pageSize", 25);
request.addProperty("pageNumber", 1);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
//AndroidHttpTransport aht = new AndroidHttpTransport(URL);
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
aht.call(SOAP_ACTION, soapEnvelope);
//SoapObject result = (SoapObject)soapEnvelope.bodyIn;
SoapObject result = (SoapObject)soapEnvelope.getResponse();
//SoapPrimitive result = (SoapPrimitive) soapEnvelope.getResponse();
//Object result = soapEnvelope.getResponse();
Log.d("WS", String.valueOf(result));
}
catch(Exception e)
{
e.printStackTrace();
}
}
и мои Глобал выглядеть следующим образом:
private static final String SOAP_ACTION = "http://yoda/SearchPerson";
private static final String METHOD_NAME = "SearchPerson";
private static final String NAMESPACE = "http://yoda/";
private static final String URL = "http://yoda/ws.asmx";
Я знаю, что «Yoda» правильно переводить как моя непараметризированный веб имя_служба является работая как кровавый чемпион. (Все идентично, за исключением вызовов «request.addProperty», которые явно (частично или полностью) данной проблемы.)
Если это важно, я пишу это на целевой платформе 1.6 с KSoap2 2.5.2 и он ведет себя одинаково во всех моих различных эмуляторах Android.
Я понюхал пакеты с помощью проводов, и, похоже, эмулятор посылает правильный материал, но полученные результаты всегда имеют значение NULL. (Я много раз тестировал эти точные параметры на своем тестовом веб-сайте, который использует эти веб-сервисы, и все отлично работает там.)
Итак, может кто-нибудь бросить мне кость здесь?
Спасибо,
Magua
EDIT 2010.11.28:
Несмотря на то, Wireshark говорит мне, что я посылаю параметры, казалось бы, что веб-сервис не получает их правильно, или что-то подобное.Я создал совершенно новую услугу, которая предположила бы вернуть простую строку, независимо от первого параметра, с «TEST» в конце, жестко запрограммированную из самой веб-службы.
Ну, каждый раз, когда я запускаю это (с Android), я получаю результат, и это всегда «ТЕСТ». Независимо от того, как я формулирую SoapEnvelope или независимо от того, что я передаю в качестве параметра, я всегда получаю «ТЕСТ». Конечно, когда я вызываю веб-сервис на сервере, он работает как чемпион (и мой результат: «ЭТО ТЕСТ»).
Мой веб-сервис находится на Windows Server 2008 с IIS 7. Пул приложений работает с фреймворком v2.0 (а не v4.0) с режимом «интегрированного» управляемого конвейера.
Я понятия не имею, где находится разъединение. Неправильно ли отправлен KSoap2 параметры? Является ли IIS настроен неправильно? Что-то еще?
Вы абсолютно правы в обеих областях. SOAP устарел, к сожалению, я недостаточно осведомлен или достаточно опытным для служб WCF и REST, чтобы сделать переход еще. (Если вы не знаете об удивительном учебнике, которого я не нашел ...) – Magua 2010-11-28 07:36:33