【问题标题】:HttpWebRequest the underlying connection was closedHttpWebRequest 底层连接已关闭
【发布时间】:2012-11-02 09:48:04
【问题描述】:

我通过网络服务使用HttpWebRequestPOST一个字节数组图片,图片大小类似于byte[4096]

代码:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(wsHost);
webRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
webRequest.Headers.Add(HttpRequestHeader.KeepAlive, "true");

我收到一个错误:

The underlying connection was closed. A connection that was expected to be kept alive was closed by the server

是服务器问题,还是我发帖问题?

【问题讨论】:

  • ..当你设置 webRequest.KeepAlive = false; 时会发生什么?
  • 我把它改成假的。错误仍然相同。问题是帖子没有登录 Fiddler。
  • 我假设您已经调试并发现 wsHost 实际上是您要发布到的有效 URL?
  • 这是提琴手代理问题,它关闭了连接。如何启用它以支持更大的数据发布?
  • 您使用的是旧版本的 Fiddler 吗?有人在这里描述类似的问题:groups.google.com/forum/?fromgroups=#!topic/httpfiddler/…

标签: c# post httpwebrequest


【解决方案1】:

这可能是很多事情。否则可以连接到服务器吗?

如果是这样,请尝试通过

关闭 Expected 100 Continue(在发布 POST 之前)
System.Net.ServicePointManager.Expect100Continue = false;

根据 HTTP 1.1 协议,发送此标头时,不会随初始请求发送表单数据。相反,如果实施正确,此标头会发送到 Web 服务器,该服务器会响应 100(继续)。但是,并非所有 Web 服务器都能正确处理此问题,包括我尝试向其发布数据的服务器。

通过http://haacked.com/archive/2004/05/15/http-web-request-expect-100-continue.aspx

如果这不起作用另一个资源:http://geekswithblogs.net/Denis/archive/2005/08/16/50365.aspx 表明许多人已经通过将他们的请求制作为 HTTP 1.0 请求来解决:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(wsHost);
webRequest.KeepAlive = false;
webRequest.ProtocolVersion=HttpVersion.Version10;

【讨论】:

  • 是的,我把它关了。只有当字节数组很大时才会发生这种情况。
  • 也许你应该用你尝试过的所有不同的东西来编辑你的初始帖子?出现此问题的原因有很多,我希望不要继续建议您已经尝试过的事情。
  • 我正在使用 fiddler,它会关闭连接。
  • 我可以在我的 Wcf 服务客户端上设置 KeepAlive 属性,但是如何设置协议版本?
  • 顺便说一句。我的客户端应用程序在其他机器上运行良好。它不适用于我的盒子,这意味着我无法调试其他问题。在 Windows 7 机器上运行了大约一年的 Windows 更新后,它似乎已经停止工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2013-10-31
  • 2018-01-31
  • 2017-09-21
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多