2010-06-23 16 views
24

J'utilise Ksoap2-Android pour consommer les services WCF.Comment utiliser les services WCF dépendants de la session à l'aide de Ksoap2-Android

Pour le client dotnet nous gardons la allowCookies="true" dans notre configuration de liaison et envoie la même sessionid et conserve mes sessions intactes dans mes services WCF (Mes services sont interdépendants et utilisent les sessions).

Tout le monde connaît un tel paramètre pour ksoap2-android, ce qui me permettra de consommer le service WCF en gardant ma session intacte sur le serveur.

Actuellement, lorsque je fais un nouvel appel au service, le sessionid est changé et toutes mes variables de session disparaissent et perdent leurs valeurs.

Répondre

1

En C# je fais les prochaines, il suffit d'utiliser les méthodes android pour ce faire:

Faire la demande 1.- Http, Faire un conteneur 2.- Cookie de la première demande. 3.- Placez le cookieContainer sur la deuxième requête, par exemple vous pouvez mettre dans un paquet dans l'intention de la 2ème activité, et utiliser ces cookies pour envoyer la deuxième requête 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); 
      } 

     } 
    } 

je le fais pour garder le sesionID de la première demande, et plus tard, dans la deuxième demande, j'ajouter le CookieContainer (parce que le serveur me demande) (pour effectuer une recherche bot);) ... J'espère que cela vous donnera des idées.