【问题标题】:Azure App Service issue with uploading large files: Unexpected end of MIME multipart stream上传大文件的 Azure 应用服务问题:MIME 多部分流意外结束
【发布时间】:2016-01-13 07:31:59
【问题描述】:

我有一个基于 AngularJS 的 Web 界面,将一个 zip 文件发送到我的 ApiController。我正在那里收到文件:

public async Task<UploadImportPackageResponse> Package()
{
    var provider = new MultipartMemoryStreamProvider();
    await this.Request.Content.ReadAsMultipartAsync(provider);
    var file = provider.Contents.FirstOrDefault(p => p.Headers.ContentDisposition.Name == "\"file\"");

这在我的开发机器上,在我们的本地测试服务器上运行良好,但在我们的 Azure 应用服务暂存站点上运行良好。

在 Azure 上会引发以下错误:

MIME 多部分流意外结束。 MIME 多部分消息不完整。

  System.IO.IOException:
  at System.Net.Http.Formatting.Parsers.MimeMultipartBodyPartParser+<ParseBuffer>d__0.MoveNext (System.Net.Http.Formatting, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
  at System.Net.Http.HttpContentMultipartExtensions+<MultipartReadAsync>d__8.MoveNext (System.Net.Http.Formatting, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Net.Http.HttpContentMultipartExtensions+<ReadAsMultipartAsync>d__0`1.MoveNext (System.Net.Http.Formatting, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at Test.Web.Areas.Admin.Controllers.ImportController+<Package>d__2.MoveNext (Test.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Threading.Tasks.TaskHelpersExtensions+<CastToObject>d__3`1.MoveNext (System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Web.Http.Controllers.ApiControllerActionInvoker+<InvokeActionAsyncCore>d__0.MoveNext (System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Web.Http.Controllers.ActionFilterResult+<ExecuteAsync>d__2.MoveNext (System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
  at System.Web.Http.Controllers.ExceptionFilterResult+<ExecuteAsync>d__0.MoveNext (System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)

这是我到目前为止所想出的:

  1. 1.5 MB 的文件可以正常上传,但 12 MB 的文件不能。 (maxRequestLength="256000" & maxAllowedContentLength="262144000"
  2. 我使用 Charles Proxy 捕获在 Azure 上导致错误的请求,并在我的本地计算机上重新执行它,它没有导致错误。所以我相信这是服务器端的问题。不是客户端问题。

我的最佳猜测是服务器缩短了请求。但我不知道为什么,也不知道要更改什么配置来解决这个问题。

【问题讨论】:

  • 您是否在 Azure Web 应用上启用远程调试以在服务器端进行故障排除?
  • 上传 12 MB 文件需要多长时间?你的连接速度很慢吗?
  • 可能需要两分钟。但我已经增加了超时时间,并没有什么不同......

标签: asp.net-mvc azure iis asp.net-web-api azure-web-app-service


【解决方案1】:

在与 Azure 支持人员交谈后,他们提到他们在生产代码中修复了这样的错误,因此我查看了所有相关的 Microsoft nuget 包,并意识到 MS 发布了新版本的 Microsoft.AspNet.WebApi (以及相关的包Client、Core、HelpPage & WebHost)

所以Update-Package Microsoft.AspNet.WebApi 帮了我大忙。

所以简短的回答是:

确保您安装了5.2.3 或更高版本的Microsoft.AspNet.WebApi

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 2012-11-26
    • 1970-01-01
    • 2013-12-10
    • 2022-07-12
    • 2016-12-31
    • 2011-03-16
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多