【问题标题】:The remote host closed the connection. The error code is 0x80070057远程主机关闭了连接。错误代码为 0x80070057
【发布时间】:2010-08-19 01:50:36
【问题描述】:

我在我的一台服务器上的日志中收到很多此类错误消息,在另外两台服务器上间歇性地收到。

谷歌搜索没有透露太多信息,主要与文件上传或下载被中断有关。

我的页面基本上只是其中带有“ok”的文本文件,只有 .aspx 扩展名用于未来计划,没有实际代码为页面提供动力。服务器都是运行 IIS7 / ASP.NET 4 的 Windows Server 2008 RC2 x64。

从统计上看,发生这种情况的时间远低于 1%,但由于流量仍然使我的事件日志变得混乱,每分钟有 2 或 3 条此类消息。

编辑: 我找到了问题,将缓冲设置为 true 阻止了它的发生。

【问题讨论】:

标签: asp.net iis-7


【解决方案1】:

你要返回Stream吗?

您可能需要在方法完成后关闭它。

看看这个:Closing Returned Streams in WCF

这是此博客建议的代码:

public Stream GetFile(string path) 
{
   Stream fileStream = null;    

   try   
   {
      fileStream = File.OpenRead(path);
   }
   catch(Exception)
   {
      return null;
   }

   OperationContext clientContext = OperationContext.Current;
   clientContext.OperationCompleted += 
       new EventHandler(delegate(object sender, EventArgs args)
       {
            if (fileStream != null) fileStream.Dispose();
       });
   return fileStream;
}

【讨论】:

    【解决方案2】:

    我知道这个问题已经得到解答,但是如果这对其他人有帮助的话,它会发生在我的 MVC 项目中,有时我在存储库顶部设置了一个 dbContext。当我切换到数据库连接的 using 语句时,该错误再也没有出现过。

    所以,我从每个存储库的顶部开始:

    DbContext db = new DbContext();
    

    对于每个单独的连接:

    using (DbContext db = new DbContext())
    {
         //db connection stuff here....
    }
    

    值得一提的是,没有人报告过看到该错误,也没有向浏览器显示任何错误,但很高兴将其从日志中删除!

    【讨论】:

    • 我喜欢这个答案,因为通常您在使用外部资源(文件、Web 服务,基本上任何需要关闭的东西)时都应该使用 using 方法。这也很酷,因为它也可以自动处理这个问题,因为它可以节省您必须编写析构函数或处置方法。
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多