2016-04-07 1 views
0

Иногда в загрузке со сжатыми файлами с телефоном приложения к вебу-службе выдает следующее сообщение об ошибке:Случайных «ошибка чтение MIME многослойного тела» в Web API

Error reading MIME multipart body part. 

at System.Net.Http.HttpContentMultipartExtensions.<MultipartReadAsync>d__8.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Net.Http.HttpContentMultipartExtensions.<ReadAsMultipartAsync>d__0`1.MoveNext() 

сами конечной точкой является довольно простым:

[System.Web.Http.HttpPost] 
    public async Task<HttpResponseMessage> TechAppUploadPhoto() 
    { 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, "The request isn't valid!"); 
     } 

     try 
     { 
      var provider = new MultipartMemoryStreamProvider(); 
      await Request.Content.ReadAsMultipartAsync(provider); 
      foreach (StreamContent file in provider.Contents) 
      { 
       Stream dataStream = await file.ReadAsStreamAsync(); 
       String fileName = file.Headers.ContentDisposition.FileName; 
       fileName = [unique name]; 

       String filePath = Path.Combine(ConfigurationManager.AppSettings["PhotoUploadLocation"], fileName); 

       using (var fileStream = File.Create(filePath)) 
       { 
        dataStream.Seek(0, SeekOrigin.Begin); 
        dataStream.CopyTo(fileStream); 
        fileStream.Close(); 
        dataStream.Close(); 
       } 

       // Enable overwriting with ZipArchive 
       using (ZipArchive archive = ZipFile.OpenRead(filePath)) 
       { 
        foreach (ZipArchiveEntry entry in archive.Entries) 
        { 
         entry.ExtractToFile(Path.Combine(ConfigurationManager.AppSettings["PhotoUploadLocation"], entry.FullName), true); 
        } 
       } 
       File.Delete(filePath); 
      } 

      return Request.CreateResponse(HttpStatusCode.Accepted); 
     } 
     catch (Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "PostCatchErr: " + e.Message + e.StackTrace); 
     } 
    } 

Эта ошибка представляется довольно случайной и трудновоспроизводимой. К сожалению, я не писал ни одного конца и не имею большого опыта здесь, но он, похоже, не связан с размером загрузки - это большой предел в веб-конфигурации, и более крупные файлы могут быть загружены, те, которые выходят из строя. Есть что-то, что мне не хватает, что может вызвать эту проблему? Кажется, что только один раз читается информация о теле, что является другой возможной причиной, которую я нашел. Есть предположения?

ответ

0

This Ответ на подобный вопрос помог мне.

Значение для maxRequestLength неверно. Он должен быть 30000 за 30 МБ (как указано в одном из комментариев к ответу).

Смежные вопросы