2011-06-08 13 views
5

En mi proyecto estoy usando el cliente de la aplicación C# y el servidor de aplicaciones web tomcat6. me escribió este fragmento en el C# cliente:Mantener una sesión al usar HttpWebRequest

public bool isServerOnline() 
{ 
     Boolean ret = false; 

     try 
     { 
      HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(VPMacro.MacroUploader.SERVER_URL); 
      req.Method = "HEAD"; 
      req.KeepAlive = false; 
      HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
      if (resp.StatusCode == HttpStatusCode.OK) 
      { 
       // HTTP = 200 - Internet connection available, server online 
       ret = true; 
      } 
      resp.Close(); 
      return ret; 

     } 
     catch (WebException we) 
     { 
      // Exception - connection not available 
      Log.e("InternetUtils - isServerOnline - " + we.Status); 
      return false; 
     } 
} 

Cada vez que invoca este método, me sale una nueva sesión del lado del servidor. Supongo que es porque debería usar cookies HTTP en mi cliente. Pero no sé cómo hacer eso, ¿puedes ayudarme?

+0

¡Buena pregunta! Las sesiones de transferencia me han mantenido despierto en el pasado – Ivo

+0

¿Y resolvió este problema? – CeccoCQ

+0

Usé la sugerencia de Guillaume en ese momento – Ivo

Respuesta

21

Debe usar un CookieContainer y mantener la instancia entre las llamadas.

private CookieContainer cookieContainer = new CookieContainer(); 
public bool isServerOnline() 
{ 
     Boolean ret = false; 

     try 
     { 
      HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(VPMacro.MacroUploader.SERVER_URL); 
      req.CookieContainer = cookieContainer; // <= HERE 
      req.Method = "HEAD"; 
      req.KeepAlive = false; 
      HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
      if (resp.StatusCode == HttpStatusCode.OK) 
      { 
       // HTTP = 200 - Internet connection available, server online 
       ret = true; 
      } 
      resp.Close(); 
      return ret; 

     } 
     catch (WebException we) 
     { 
      // Exception - connection not available 
      Log.e("InternetUtils - isServerOnline - " + we.Status); 
      return false; 
     } 
} 
+0

Gracias, lo intento y le hago saber si esto funciona. Pero tengo una pregunta: si la cookie expiró, ¿cómo puedo gestionar esto? – CeccoCQ

+0

Otra pregunta, pero no debería obtener la cookie de la respuesta? – CeccoCQ

+0

El contenedor se llenará, no tiene que preocuparse por la cookie de respuesta. Además, el tamaño del contenedor es limitado y cuando se alcanza el límite, se eliminan las cookies caducadas. – Guillaume

Cuestiones relacionadas