C#:如何通过WebRequest发布大字符串?

时间:2011-02-15 08:30:15

标签: c# httpwebrequest timeout http-post

如何使用POST上传大字符串(在我的情况下使用BLOB的XML)而不使用GetResponse获取超时?

更改超时有帮助,但这不是一个真正的解决方案。 如果服务器确实死亡或POST中断,我必须等待极端大的超时。

任何想法?

HttpWebRequest webRequest = null;
string response = "";
byte[] bytes = Encoding.UTF8.GetBytes(xml);

try
{
    webRequest = (HttpWebRequest)WebRequest.Create("http://" + this.host + ":" + this.port);
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.Method = "POST";
    webRequest.Timeout = 5000;

    webRequest.ContentLength = bytes.Length;
    using (Stream requeststream = webRequest.GetRequestStream())
    {
        requeststream.Write(bytes, 0, bytes.Length);
        requeststream.Close();
    }

    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
    {
        using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
        {
            response = sr.ReadToEnd().Trim();
            sr.Close();
        }
        webResponse.Close();
    }
}
catch(Exception ex)
{
    MessageBox.Show(ex.ToString());
}
return response;

1 个答案:

答案 0 :(得分:3)

是的,这是非常期待的http行为。

选项:

  • 有一个很大的超时(你已经完成了这个),并接受合法地超时可能需要很长时间(而不是因为带宽需要一段时间)
  • 也许你可以在请求上应用gzip(并告诉服务器你发送它压缩);老实说,我不知道这是否支持自动,但它当然可以通过api显式检查特定标头并在有效负载上应用gzip解压缩来完成
  • 更改api以执行许多小型上传和完成消息
  • 和它一起生活