2015-10-13 55 views
0

当我点击此API时,TaskCanceledException引发了无用的堆栈跟踪。我正在使用这个图书馆:https://npoi.codeplex.com/使用NPOI工作簿检索MemoryStream时引发的TaskCanceledException

public class TestController : ApiController 
    { 
     [HttpGet] 
     public HttpResponseMessage Test() 
     { 
      var templateWorkbook = new XSSFWorkbook(); 
      var sheet = templateWorkbook.CreateSheet("TestSheet"); 
      IRow dataRow = sheet.CreateRow(4); 
      var cell = dataRow.CreateCell(0); 
      cell.SetCellValue(77); 

      Stream memoryStream = new MemoryStream(); 
      templateWorkbook.Write(memoryStream); 

      var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) 
      { 
       Content = new StreamContent(memoryStream) 
      }; 
      httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
      httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "test.xlsx" }; 
      return httpResponseMessage; 
     } 
    } 

我在做什么错了?这是我的堆栈跟踪:

[TaskCanceledException:一个任务被取消]
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+ 165
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (任务 任务)+58
System.Web.Http.Owin.d__20.MoveNext()666个
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+137
System.Runtime.CompilerServices。 TaskAwaiter.Handle NonSuccessAndDebuggerNotification(任务 任务)+58
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务task)+25 System.Web.Http.Owin.d__0.MoveNext()1814
System.Runtime.CompilerServices.TaskAwaiter .ThrowForNonSuccess(任务 任务)+137
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)+58
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext() +187 System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+99
System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)+58
Microsoft.Owin.Security.Infrastructure.d__0.MoveNext()561个
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+137
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)+58
Microsoft.Owin.Security.Infrastructure.d__0.MoveNext()561
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+ 137
System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(任务 任务)+58 Microsoft.Owin.Cors.d__0.MoveNext()+856
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+137
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (任务 任务)+58
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext() +187 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+99
System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)+58
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.MoveNext() 185 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult的 AR)69
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline .IntegratedPipelineContext。EndFinalWork(IAsyncResult的 AR)64
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 380 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔& completedSynchronously)155

+0

你能识别你的问题哪一行抛出异常? –

回答

0

我找到了解决方案。

复制内存流到另一个和寻求位置初始化为0,似乎解决它:

MemoryStream memoryStream = new MemoryStream(); 
templateWorkbook.Write(memoryStream); 
MemoryStream copy = new MemoryStream(memoryStream.ToArray()); 
copy.Seek(0, SeekOrigin.Begin); 

好像在NPOI图书馆给我的错误...

相关问题