Видимо, это довольно часто встречающаяся проблема.Я не совсем уверен, в чем проблема или что нужно исправить, но я не могу получить ничего, кроме результата NULL, для моего SoapObject или SoapPrimitive из моего веб-сервиса .NET XML с параметрами.
Я перепробовал все, что нашел в сети:
- Добавление .setXmlVersionTag = без изменений
- Использование SoapObject вместо SoapPrimitive = без изменений
- Использование SoapPrimitive вместо SoapObject = без изменений
- Использование HttpTransportSE вместо AndroidHttppTransport = без изменений
- Использование AndroidHttpTransport вместо HttpTransportSE = без изменений
- Установка .dotNet = true= без изменений
- Удаление строки назначения .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.
Я прослушал пакеты с помощью wireshark, и эмулятор, кажется, отправляет правильные данные, но полученные результаты всегда равны NULL.(Я тестировал эти точные параметры много раз на своем тестовом веб-сайте, который использует эти веб-сервисы, и там все отлично работает.)
Итак, кто-нибудь может бросить мне кость?
Спасибо,
Магуа
РЕДАКТИРОВАТЬ 2010.11.28:
Несмотря на то, что Wireshark говорит мне, что я отправляю параметры, может показаться, чтовеб-сервис не получает их правильно, или что-то подобное.Я создал совершенно новый сервис, который должен был возвращать простую строку, каким бы ни был первый параметр, с «TEST» в конце, жестко закодированным из самого веб-сервиса.
Ну, каждый раз, когда я запускаю это (от Android) Я получаю результат, и это всегда "ТЕСТ".Независимо от того, как я формулирую SoapEnvelope или независимо от того, что я передаю в качестве параметра, я всегда получаю «ТЕСТ».Конечно, когда я вызываю веб-сервис на сервере, он работает как чемпион (и мой результат - «ЭТО ТЕСТ»).
Мой веб-сервис работает на Windows Server 2008 с IIS 7. Пул приложенийработает на платформе v2.0 (не v4.0) с «интегрированным» режимом управляемого конвейера.
Понятия не имею, где находится разъединение.KSoap2 отправляет параметры неправильно?IIS настроен неправильно?Что-то еще целиком?