Библиотека KSOAP2 ... Ошибка отправки данных в ASMX Webservice
-
27-10-2019 - |
Вопрос
У меня есть настройка веб -сервиса ASMX на Microsoft Azure, и я пытаюсь отправить данные в Webservice и получить вывод с помощью приложения Android. Для этого я использую библиотеку KSOAP.
На веб -сервисе я проверяю, являются ли строки нулевы. Если они есть, я возвращаю код ошибки "2405"
[WebMethod]
public string LoginUser(string auth_token, string username)
{
// All these tests performed, so someone from outside of out application
// scope does not attempt to abuse our webservice.
#region Check for nulls
if (string.IsNullOrEmpty(auth_token))
return "2405";
if (string.IsNullOrEmpty(username))
return "2405";
#endregion
}
В моем приложении Android я отправляю данные, но веб -сервис по -прежнему возвращает код ошибки 2405, что означает, что данные не отправляются.
Ниже приведено мой код Android:
SoapObject request = new SoapObject(NAMESPACE, method_name);
PropertyInfo pi = new PropertyInfo();
pi.setName("auth_token");
pi.setValue("TestAuth");
request.addProperty(pi);
PropertyInfo pe = new PropertyInfo();
pe.setName("username");
pe.setValue("TestUser");
request.addProperty(pe);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Извините, что я могу предоставить вам пространство имен, метод, URL и т. Д. Это противоречит политике компании, и я надеюсь, что вы понимаете. :)
Тем не менее, я снова прошу ошибку. После вызова вышеуказанного кода Android, веб -сервис возвращает 2405, что в соответствии с кодом ASMX, когда любое из значений TWOS является нулевым.
ОБНОВИТЬ: Я отлаживал запрос SOAP (androidhttptransport.debug = true) и получил следующие результаты для запроса и отклика.
Запрос свалки
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<LoginUser xmlns="http://tempuri.org" id="o0" c:root="1">
<auth_token i:type="d:string">TestAuth</auth_token>
<username i:type="d:string">TestUser</username>
</LoginUser>
</v:Body>
</v:Envelope>
Ответы
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<LoginUserResponse xmlns="http://tempuri.org/">
<LoginUserResult>2405</LoginUserResult>
</LoginUserResponse>
</soap:Body>
</soap:Envelope>
Обновление 2
Это то, что Сервер ожидает:
<?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>
<LoginUser xmlns="http://tempuri.org/">
<auth_token />
<username />
</LoginUser>
</soap:Body>
</soap:Envelope>
Это то, что Приложение Android отправляет:
<?xml version="1.0" encoding="utf-8"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<LoginUser xmlns="http://tempuri.org" id="o0" c:root="1">
<auth_token i:type="d:string">TestAuth</auth_token>
<username i:type="d:string">TestUser</username>
</LoginUser>
</v:Body>
</v:Envelope>
В дополнение к этому я добавил следующую строку в код Android:
androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
ПОЖАЛУЙСТА ПОМОГИ!
Большое спасибо!
Решение
Я смог очистить ошибку ... Проблема заключалась в том, что у меня не было обратной черты после URI пространства имен ... причина, по которой я этого не сделал, заключается в том, что с BackSlash я получил ошибку «Последовательность« не содержит элементов ». .. теперь, однако, у меня разные ошибки ... если мне нужна помощь, я выложу на Stackoverflow ... спасибо за щедрую помощь :)
Чтобы быть ясным, пространство имен должен Соберите AA BackSlash в конце, чтобы сервер получил любые параметры.
Другие советы
Привет
Есть два способа решения вашей проблемы: один - это ваш путь, используя PropertyInfo или, во -вторых, мои способы: напрямую добавление параметра для запроса параметра.
Первые способы:
PropertyInfo pi = new PropertyInfo();
pi.setName("auth_token");
pi.setValue("TestAuth");
pi.setType(String.class);
request.addProperty(pi);
PropertyInfo pe = new PropertyInfo();
pe.setName("username");
pe.setValue("TestUser");
pe.setType(String.class);
request.addProperty(pe);
Вторые способы:
SoapObject request = new SoapObject(NAMESPACE, method_name);
request.addProperty("auth_token","TestAuth");
request.addProperty("username","TestUser");
Попробуйте этот код, он будет работать.
в пространстве имен поможет вам написать HTTP с помощью капитала H, как это
вместо имен пространство = "http://tempuri.org/"; Попробуйте это пространство имен = "http://tempuri.org";
По крайней мере, в моем случае помог. Надеюсь, какое -то тело поможет!
Габриэль