Asp.Net MVC线程在长时间运行的操作中被中止

本文关键字:操作 运行 长时间 Net MVC 线程 Asp | 更新日期: 2023-09-27 17:58:55

我已经实现了一个使用asp.net MVC将excel文件转换为.csv文件的web应用程序。

使用小文件一切正常。

但当我试图运行更大的文件时,我在客户端收到错误"ERR_CONNECTION_RESET"。

我做过R&D并已找到解决方案,即

即便如此,我也面临同样的问题。然后,我通过引用这个Set Timeout For Controller Action实现了线程化。

现在我得到了"线程被中止"的异常。

在这里我添加了堆栈跟踪。请帮我整理一下。。。

Exception: 'Thread was being aborted.' : 
StackTrace: 'at System.Data.Common.UnsafeNativeMethods.IRowset.GetData(IntPtr hRow, IntPtr hAccessor, IntPtr pData)
at System.Data.OleDb.OleDbDataReader.GetRowDataFromHandle()
at System.Data.OleDb.OleDbDataReader.GetValueBinding(MetaData info)
at System.Data.OleDb.OleDbDataReader.GetValues(Object[] values)
at  System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)
at System.Data.ProviderBase.SchemaMapping.LoadDataRow()
at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at ExcelToCsvConversion.Controllers.HomeController.Check_In_Masters(String sourceFile, String worksheet2, Int32 colNo, String fieldValue)'

这是我的代码。。。。

   public ActionResult ConvertToCsv(FileUpload model)
    {       
        var fileName = model.SourceFile;
        FileUpload fileUpload = new FileUpload();
        try
        {
            string filename = Path.GetFileName(model.SourceFile);
            model.SourceFile = Path.Combine(Server.MapPath("~/App_Data/uploads"), filename);
                model.WorkSheet1 = "Upload file$";
                System.Threading.Tasks.Task.Factory.StartNew(() => ConvertExcelToCSV_LT(model));
                fileUpload.SourceFile = filename;
        }
        catch (Exception e)
        {
            ServerExceptionLog(e);
        }
        return Json(new { filemodel = fileUpload }, JsonRequestBehavior.AllowGet);
    }

Asp.Net MVC线程在长时间运行的操作中被中止

你试过玩吗

<httpRuntime executionTimeout="HH:MM:SS" />

默认情况下,您的时间限制为110秒。

增加web.config 中的上传大小

<system.web>
  <httpRuntime maxRequestLength="2147483647" />
</system.web>
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="52428800" /> <!--50MB-->
    </requestFiltering>
  </security>
</system.webServer>

maxRequestLengthInt32(请选中此处),因此您可以相应地设置大小。
maxAllowedContentLengthuint(请在此查看)

您使用TaskCreationOptions.LongRunning尝试过吗?

Task.Factory.StartNew(() => ConvertExcelToCSV_LT(model), 
    TaskCreationOptions.LongRunning);