2010-06-23 14 views
24

Sto utilizzando Ksoap2-Android per l'utilizzo dei servizi .Come consumare servizi WCF dipendenti dalla sessione utilizzando Ksoap2-Android

Per il client dotnet Manteniamo il allowCookies="true" nella nostra configurazione di legame e invia lo stesso sessionid e mantiene intatte le mie sessioni nei miei servizi WCF (miei servizi sono interdipendenti e utilizzare le sessioni).

Qualcuno conosce una tale impostazione per ksoap2-android, che mi consentirà di utilizzare il servizio WCF mantenendo la mia sessione intatta sul server.

Attualmente quando si effettua una nuova chiamata al servizio, lo sessionid viene modificato e tutte le mie variabili di sessione vengono cancellate e perdono i loro valori.

risposta

1

In C# che faccio i prossimi, basta usare i metodi di Android per fare questo:

1.- Fai la richiesta HTTP, 2.- Fare un cookie contenitore della prima richiesta. 3.- Metti il ​​cookieContainer sulla seconda richiesta, ad esempio puoi inserire un bundle in un intento per la 2a attività e utilizzare questi cookie per inviare la seconda richiesta http ...

My C# Code;

protected static void GetData() 
    { 
     CookieContainer cookies = new CookieContainer(); 
     HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("https://any.com/url"); 
     request1.CookieContainer = cookies; 
     HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse(); 
     StreamReader responseReader1 = new StreamReader(response1.GetResponseStream()); 
     Response1 = responseReader1.ReadToEnd(); 
     responseReader1.Close(); 
     responseReader1.Dispose(); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 
     request.CookieContainer = cookies; 
     request.Method = "GET"; 
     request1.KeepAlive = true; 
     try 
     { 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      StreamReader responseReader = new StreamReader(response.GetResponseStream()); 
      Response = responseReader.ReadToEnd(); 
      responseReader.Close(); 
      responseReader.Dispose(); 
      if (Response.Contains("Server Error in '/Verification' Application.")) 
      { 
       Console.WriteLine("Empty Registry" + Url); 
      } 
     } 
     catch (WebException ex) 
     { 
      if (ex.Response != null) 
      { 
       Console.WriteLine("Failed at: " + Url); 
      } 
      if (ex.Status == WebExceptionStatus.ProtocolError) 
      { 
       if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) 
       { 
        Console.WriteLine(ex.Status); 
       } 
      } 
      else if (ex.Status == WebExceptionStatus.NameResolutionFailure) 
      { 
       Console.WriteLine(ex.Status); 
      } 

     } 
    } 

lo faccio per tenere la sesionID della prima richiesta, e più tardi, nella seconda richiesta, aggiungo il CookieContainer (perché il server mi impone) (cercare in bot);) ... spero che questo ti dia delle idee.

Problemi correlati