#php #android #web-services #ksoap2
#php #Android #веб-сервисы #ksoap2
Вопрос:
Я успешно написал приложение для Android, которое вызывает asp.net веб-служба, использующая Ksoap2. Теперь я хочу перенести приложение на использование веб-службы PHP. Я успешно перенес веб-службу на собственный веб-сервис PHP (и протестировал его с помощью PHP-клиента), но у меня возникли проблемы с вызовом его с помощью KSOAP. Одна мысль, которая поразила меня, заключалась в том, что собственный веб-сервис PHP не был создан с использованием wsdl и не способен автоматически генерировать wsdl. Требуется ли ksoap2 для wsdl для успешного вызова метода веб-службы?
The asp.net веб-сервис находится по адресу http://mycomputer/AlumLocateService/Service.asmx
Для успешного вызова asp.net обслуживание:
private static final String NAMESPACE = "http://mycomputer/";
private static final String URL = "http://mycomputer/AlumLocateService/Service.asmx";
private static final String METHOD_NAME_3 = "FindCloseDetails";
private static final String SOAP_ACTION_3 = NAMESPACE METHOD_NAME_3;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_3);
PropertyInfo pi = new PropertyInfo();
pi.setName("userid");
pi.setValue(userid);
pi.setType(string.class);
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION_3, envelope);
//Parse Response
Object myResult = envelope.bodyIn;
SoapObject resultsRequestSOAP = (SoapObject) myResu<
String[] results = getStringArrayResponse(resultsRequestSOAP, null);
return results;
Служба PHP расположена по адресу http://mycomputer/PHPTest/testserver.php и воспроизводит методы asp.net веб-сервис. Я надеялся, что все, что мне нужно будет сделать, это изменить следующее
private static final String URL = "http://mycomputer/PHPTest/testserver.php";
и удалите строку
envelope.dotNet = true;
но когда я это делаю, я получаю «XmlPullParserException: неожиданный тип (позиция END_DOCUMENT null ….» при выполнении вызова androidHttpTransport.call (SOAP_ACTION_3, envelope).
Комментарии:
1. не могли бы вы, пожалуйста, указать код, используемый для вызова веб-сервиса PHP с использованием KSOAP2
2. Теперь я внедрил свой PHP-сервис, используя Zend_Soap_Server, а не собственный SoapServer. Zend_Soap_Server способен автоматически генерировать WSDL.
Ответ №1:
Тот, который я изменил на использование PHP Zend_Soap_Server, мне пришлось изменить последнюю часть моего кода Android на:
Object myResult = envelope.getResponse();
String[] results = null;
if (myResult instanceof Vector)
{
Vector<Object> myVector = (Vector<Object>) myResu<
results = new String[myVector.size()];
for (int i = 0; i< myVector.size();i ){
results[i] = myVector.elementAt(i).toString();
}
}
return results;
Комментарии:
1. Я только что проверил — собственный php SoapServer также работает теперь, когда я изменил код Android.