2010-06-23 17 views
24

Estoy usando Ksoap2-Android para consumir los servicios WCF.Cómo consumir servicios WCF dependientes de la sesión usando Ksoap2-Android

Para el cliente dotnet mantenemos la allowCookies="true" en nuestra configuración de enlace y envía la misma sessionid y mantiene intacto en mis sesiones de mis servicios WCF (Mis servicios son interdependientes y utilizan las sesiones).

Cualquiera conoce cualquiera de estas configuraciones para ksoap2-android, que me permitirán consumir el servicio WCF manteniendo mi sesión intacta en el servidor.

Actualmente, cuando realizo una nueva llamada al servicio, el sessionid cambia y todas mis variables de sesión se borran y pierden sus valores.

Respuesta

1

En C# hago la siguiente, sólo tiene que utilizar los métodos android para hacer esto:

1.- Hacer la petición HTTP, 2.- Hacer un contenedor de cookies de la primera solicitud. 3.- Coloque el cookieContainer sobre la segunda solicitud, por ejemplo, puede colocar un paquete en una intención para la segunda actividad, y use estas cookies para enviar la segunda solicitud http ...

Código My C#;

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); 
      } 

     } 
    } 

yo que para mantener el sesionID de la primera solicitud, y después, en la segunda solicitud, agrego el CookieContainer (debido a que el servidor me requiere) (para hacer un robot de búsqueda);) ... Espero que esto te de ideas.

Cuestiones relacionadas