System.Web.HttpException:远程主机关闭了连接。错误代码是0x800704CD

时间:2016-11-27 18:44:13

标签: c# sql asp.net-mvc azure connection-timeout

我查看了所有可能的答案,但没有任何可以让我找到解决这个不稳定问题的解决方案。

在我工作的MVC5 Web应用程序中,一些用户可以下载按下下载按钮时生成的Excel文件。在编写本文时,Web应用程序不会将文件存储在服务器上。因此,用户需要等到它完成才能将其视为成功下载的文件。

我将粘贴下面的代码。问题是下载方法创建了一个

  

500 - 连接超时

如果它似乎是很长一段时间以来第一次没有被击中这个方法。如果用户按下浏览器后退按钮并再次执行此操作,则下载时间将非常短,如果没有人下载他们的Excel文件,问题将在几小时后回来。

当连接超时时,我收到了错误报告。第一个是:

  

System.Web.HttpException:远程主机关闭了连接。该   错误代码是0x800704CD。生成:太阳,2016年11月27日16:33:58 GMT

     

System.Web.HttpException(0x800704CD):远程主机关闭了   连接。错误代码是0x800704CD。在   System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(的Int32   结果,布尔throwOnDisconnect)at   System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()at   System.Web.HttpResponse.Flush(布尔值finalFlush,布尔异步)at   System.Web.HttpResponse.Flush()at   System.Web.HttpResponseWrapper.Flush()

第二个是:

  

System.Web.HttpException:服务器无法在HTTP之后追加标头   标题已发送。生成:太阳,2016年11月27日16:33:58 GMT

     

System.Web.HttpException(0x80004005):服务器无法追加标头   发送HTTP标头后。在   System.Web.HttpResponse.AppendHeader(String name,String value)at   System.Web.HttpResponseWrapper.AppendHeader(String name,String value)   在System.Web.Mvc.MvcHandler.AddVersionHeader(HttpContextBase)   httpContext)   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase   httpContext,IController&控制器,IControllerFactory&厂)
  在System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase)   httpContext,AsyncCallback回调,对象状态)at   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,   AsyncCallback回调,对象状态)

以下是代码:

[HttpPost]
public async Task<EmptyResult> Export(ExcelViewModel vModel)
        {
            /*
             * Note:
             * Update the download date to keep track on new entries.
             */
            var fileName = string.Empty;
            var fileStream = await Task.Run(async () =>
            {
                var e = await _eventService.FindAsync(base.UserLanguageId, int.Parse(vModel.EventId));
                var orders = _orderSKUDiscountService.GetMembershipsByConfirmedOrders(base.AuthenticatedUser.Id, e.Slug, "");

                var lots = _lotService.GetLotByEventWihRecipient(e.Id).ToList();
                var stream = PushDataToExcel(lots, orders, DateTimeUtility.GetTimeFromUtc(e.LatestExcelDownloadDateUtc.Value));

                if (stream != null)
                {
                    e.LatestExcelDownloadDateUtc = DateTime.UtcNow;
                    if (await _unitOfWorkAsync.SaveChangesAsync() > 0)
                    {
                        fileName = Tools.StripAccent(e.Name) + "-rapport";
                        return stream;
                    }
                }

                return new MemoryStream();
            });

            // Write it back to the client
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", string.Format("attachment;  filename={0}.xlsx", fileName));
            Response.OutputStream.Write(fileStream.GetBuffer(), 0, (int)fileStream.Length);

            Response.Flush();
            Response.End();
            fileStream.Close();

            return new EmptyResult();
        }

总而言之,这是一个MVC5 C#Web应用程序,Azure上的主机,带有S0数据库。我尝试通过在上面的代码中看到的 FindByAsync GetMembershipsByConfirmedOrders 之前和之后放置一个长Tread.Sleep来重现问题,这些是对数据库的请求,但我从来没有把连接超时。所以我对如何解决它感到有些困惑。

谢谢

大卫

0 个答案:

没有答案