2011-06-08 5 views
5

Dans mon projet, j'utilise le client d'application C# et le serveur d'applications Web tomcat6. j'ai écrit cet extrait dans le client C#:Conservation d'une session lors de l'utilisation de 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; 
     } 
} 

Chaque fois que j'invoque cette méthode, je reçois une nouvelle session à côté serveur. Je suppose que c'est parce que je devrais utiliser des cookies HTTP dans mon client. Mais je ne sais pas comment faire ça, peux-tu m'aider?

+0

Bonne question! Les sessions de transfert m'ont gardé éveillé allouer dans le passé – Ivo

+0

Et avez-vous résolu ce problème? – CeccoCQ

+0

J'ai utilisé la suggestion de Guillaume à l'époque – Ivo

Répondre

21

Vous devez utiliser un CookieContainer et conserver l'instance entre les appels.

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

Merci, je l'essaie et je vous dis si cela fonctionne. Mais j'ai une question: si le cookie a expiré, comment puis-je gérer cela? – CeccoCQ

+0

Une autre question, mais je ne devrais pas obtenir le cookie de la réponse? – CeccoCQ

+0

Le conteneur sera rempli, vous n'avez pas à vous soucier du cookie de réponse. La taille du conteneur est également limitée et lorsque la limite est atteinte, les cookies expirés sont supprimés. – Guillaume

Questions connexes