Scarichiamo il jar relativo qui , importiamolo nel nostro progetto e aggiungiamo le referenze nella nostra classe:
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
Supponendo di avere un webservice con una pagina "Service1.asmx" la quale contiene questo metodo:
Lato Android io effettuo la chiamata al metodo HelloWorld così:[
WebMethod
] public string HelloWorld(string valore) { return valore; }
//Definisco le costanti utili alla configurazione degli oggetti ksoap2.
private static final String
NAMESPACE
= "
http://tempuri.org/"
; private static final String
METHOD_NAME
= "
HelloWorld
";
//Se si vuole fare dei WS fatti in casa è possibile utilizzare dei servizi di redirect
//gratuiti come No-IP. "aliascelto.zapto.org" rimanderà grazie al client No-IP al mio Ip pubblico.
//Se abbiamo un router, bisognerà ricordarsi di aprire le porte da noi utilizzate
//(vedi anche firewall di Windows). --> http://www.no-ip.com
private static final String
URL
= "
http://aliasscelto.zapto.org/Service1.asmx
"; final String
SOAP_ACTION
= "
http://tempuri.org/HelloWorld
";
//Richiesta
SoapObject request = new SoapObject(
NAMESPACE
,
METHOD_NAME
);
request.addProperty("
valore
", s);
//valore non è altro che il nostro parametro d'ingresso
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.
VER11
); envelope.dotNet = true;
//opzionale
envelope.setOutputSoapObject(request);
//Chiamata
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); androidHttpTransport.call(
SOAP_ACTION
, envelope);
//Risposta
SoapPrimitive result = (SoapPrimitive)envelope.getResponse(); String r= result.toString();
Lo stesso identico codice è possibile riutilizzarlo per WS in WCF, cambierebbe solo la costante URL.
Ovviamente questo è un metodo e una soluzione, a voi la scelta :)
No comments:
Post a Comment