2011-06-08 46 views
5

在我的项目中,我使用C#应用程序客户端和tomcat6 Web应用程序服务器。 我在C#客户端写了这个片断:使用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; 
     } 
} 

每次我调用这个方法,我在服务器端得到一个新的会话。 我想这是因为我应该在我的客户端使用HTTP cookie。但我不知道该怎么做,你能帮助我吗?

+0

好问题!转移会话让我一直保持清醒状态 – Ivo 2011-06-08 07:47:09

+0

您是否解决了这个问题? – CeccoCQ 2011-06-08 07:54:39

+0

当时我使用了Guillaume的建议 – Ivo 2011-06-08 07:56:48

回答

21

您必须使用CookieContainer并保持呼叫之间的实例。

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

谢谢,我试了一下,让你知道这是否有效。但我有一个问题:如果cookie过期了,我该如何管理? – CeccoCQ 2011-06-08 07:50:49

+0

另一个问题,但我不应该从响应中获取Cookie? – CeccoCQ 2011-06-08 07:54:10

+0

容器将被填充,您不必关心响应cookie。此外,容器的大小是有限的,当达到限制时,过期的cookies将被删除。 – Guillaume 2011-06-08 08:53:01