如何在使用httpwebrequest时保持连接状态?

时间:2010-11-02 19:58:06

标签: httpwebrequest httpwebresponse

我正在使用httpwebrequest和httpwebresponse分别发送请求和获取响应。 出于某种原因,在收到响应之前我的连接已关闭。

这是我的代码:

           WebRequest webRequest = WebRequest.Create (uri);
           webRequest.ContentType = "application/x-www-form-urlencoded";
           webRequest.Method = "POST";
           byte[] bytes = Encoding.ASCII.GetBytes (parameters);
           Stream os = null;
           try
           { // send the Post
              webRequest.ContentLength = bytes.Length;   //Count bytes to send
              os = webRequest.GetRequestStream();
              os.Write (bytes, 0, bytes.Length);         //Send it
           }
           catch (WebException ex)
           {
              MessageBox.Show ( ex.Message, "HttpPost: Request error", 
                 MessageBoxButtons.OK, MessageBoxIcon.Error );
           }

           try
           { // get the response
              WebResponse webResponse = webRequest.GetResponse();
              if (webResponse == null) 
                 { return null; }
              StreamReader sr = new StreamReader (webResponse.GetResponseStream());
              return sr.ReadToEnd ().Trim ();
           }
           catch (WebException ex)
           {
              MessageBox.Show ( ex.Message, "HttpPost: Response error", 
                 MessageBoxButtons.OK, MessageBoxIcon.Error );
           }
           return null;
        }

错误:

alt text

2 个答案:

答案 0 :(得分:1)

默认情况下,如果您使用HTTP / 1.1协议,则假定连接保持活动状态,除非服务器决定另外指示(使用Connection:close标头)。

在您的情况下,您有一台服务器拒绝请求500错误。你应该调查为什么会这样。你不应该担心连接:此时关闭标题。即使服务器关闭连接,客户端也会在下次打开新连接时正常处理。

总而言之,来自服务器的500响应不是由于连接被关闭。这是因为服务器不喜欢你发送的请求。

答案 1 :(得分:0)

如果是会话超时错误(我看不到错误消息),您应该在Web服务器或J2EE服务器中具有如下配置参数。

以下是来自tomcat web.xml

  
     
<session-config>
    <session-timeout>30</session-timeout>
</session-config>