HttpWebRequest request;
HttpWebResponse response;
request = (HttpWebRequest)WebRequest.Create(address);
request.Method = "POST";
result = GetString(doc);
buffer = Encoding.Default.GetBytes(result);
request.ContentLength = (long)buffer.Length;
using (Stream stream = request.GetRequestStream())
{
    stream.Write(buffer, 0, buffer.Length);
}
response = (HttpWebResponse)request.GetResponse();//代码大家一看就懂,就是这句会出错。经常会抛出:The underlying connection was closed: An unexpected error occurred on a receive.的异常,翻译过来:基础连接已关闭:接收时发生意外错误。但是不是每次都发送失败,请问有人知道问题所在或者可能的原因吗?

解决方案 »

  1.   

    http://blog.csdn.net/fangxinggood/archive/2011/04/29/6372998.aspx看看有没有帮助
      

  2.   

    2楼,首先感谢你的回答。我以前确实遇到过你说的这种情况,就是HttpWebRequest没有及时Abort造成HttpWebRequest阻塞,直至超时抛出异常。但是现在这种情况似乎和上面的情况相反,没有到超时时间只要运行到GetResponse马上就会抛出基础连接已关闭的异常。
      

  3.   

    没有用WebService。就是web页面通过http的方式把一个xml文件发送给装在局域网内其他电脑上的一个cs软件,这个cs软件接收到文件后解析执行,但是有时候发送就失败。
      

  4.   


    我觉得可能是服务端的事,HttpListener? 它是否独立线程?
      

  5.   

    那个cs软件要频繁的接收web页面还有另一个嵌入式前端发送的命令。在以前的项目中一直没问题,最近新部署了一个环境就出这问题了。要说是网络问题,可有一点我忘了说了:实际web在一个任务执行中给cs软件发送了两个xml文件,都是通过我上面代码的那种方式,第一次总没问题,而第二次有时候就会抛异常。
      

  6.   

    通过http协议?http没有这么强大用socket  基于 tcp/IP   或者   UDP 协议传输文件用线程点对点传输  如果文件过大  还可以断点续传
      

  7.   

    试试
    using (Stream stream = request.GetRequestStream())
    {
      stream.Write(buffer, 0, buffer.Length);
      response = (HttpWebResponse)request.GetResponse();
    }
      

  8.   

    通过设置:
    HttpWebRequest.KeepAlive=false;
    HttpWebRequest.ProtocolVersion = HttpWebRequest.ProtocolVersion;
    后发送成功的概率增加了很多,但偶尔还是会出现这个问题。