В случай, че по-долу е твърде дълго, въпросът ми е дали IIS Express 8 във Visual Studio 2013 се подчинява на атрибута maxAllowedContentLength
или има някаква приоритетна стойност, която предотвратява големи заявки
При отстраняване на грешки в някои извиквания на webapi срещу Visual Studio 2013, получавам тази грешка:
Maximum request length exceeded.
Търсих в интернет и всичко изглежда сочи към тези два конфигурационни записа:
IIS 6-: maxRequestLength
IIS 7+: maxAllowedContentLength
Добавих и двата тези конфигурационни записа към моя web.config със стойност 4294967295, просто за безопасност. Когато се опитам да се обадя на контролера, все още получавам грешката.
Това ме накара да си помисля, че изпращам някакво гигантско количество данни към сървъра, но fiddler ми казва следното:
Request Count: 1
Bytes Sent: 4,327,084 (headers:1,026; body:4,326,058)
Bytes Received: 3,808 (headers:434; body:3,374)
И виждайки как, 4,327,084 ‹ 4,294,967,295 чувствам, че не би трябвало да има проблеми с тази заявка.
Следващото място, което се сетих да потърся, е кодът на моя сървър:
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartFormDataStreamProvider(@"C:\tmp", Int32.MaxValue);
var task = Request.Content.ReadAsMultipartAsync(provider).ContinueWith(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw t.Exception; // <== This gets thrown
Така че отново размерът на заявката е значително по-малък от размера на буфера за доставчика на поток от данни.
Така че накратко, нямам представа какво се случва. Заявката е доста голяма, но от това, което мога да кажа, няма причина това да се провали. Това причинено ли е от VS13/IIS Exp8? Или има нещо друго, което пропускам?
Благодаря предварително за всяка помощ, която можете да предложите.
Ето записа в конфигурацията, който казах, че ще предоставя
<requestLimits maxAllowedContentLength="4294967295" />
И ето пълното изключение
System.IO.IOException: Error reading MIME multipart body part. ---> System.Web.HttpException: Maximum request length exceeded.
at System.Web.HttpBufferlessInputStream.ValidateRequestEntityLength()
at System.Web.HttpBufferlessInputStream.GetPreloadedContent(Byte[] buffer, Int32& offset, Int32& count)
at System.Web.HttpBufferlessInputStream.BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
at System.IO.Stream.<BeginEndReadAsync>b__d(Stream stream, ReadWriteParameters args, AsyncCallback callback, Object state)
at System.Threading.Tasks.TaskFactory`1.FromAsyncTrim[TInstance,TArgs](TInstance thisRef, TArgs args, Func`5 beginMethod, Func`3 endMethod)
at System.IO.Stream.BeginEndReadAsync(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.Stream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
at System.Web.Http.WebHost.SeekableBufferedRequestStream.<ReadAsync>d__0.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.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at System.Net.Http.HttpContentMultipartExtensions.<MultipartReadAsync>d__8.MoveNext()
--- End of inner exception stack trace ---
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.Runtime.CompilerServices.TaskAwaiter.GetResult()
at System.Net.Http.HttpContentMultipartExtensions.<ReadAsMultipartAsync>d__0`1.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.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at BICWeb.webservices.controllers.FormsDesignerController.<Post>d__b.MoveNext() in c:\code\BIC_CORE\TRUNK\BIC\src\BICWeb\webservices\controllers\FormsDesignerController.cs:line 300
И вътрешното изключение
System.Web.HttpException (0x80004005): Maximum request length exceeded.
at System.Web.HttpBufferlessInputStream.ValidateRequestEntityLength()
at System.Web.HttpBufferlessInputStream.GetPreloadedContent(Byte[] buffer, Int32& offset, Int32& count)
at System.Web.HttpBufferlessInputStream.BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
at System.IO.Stream.<BeginEndReadAsync>b__d(Stream stream, ReadWriteParameters args, AsyncCallback callback, Object state)
at System.Threading.Tasks.TaskFactory`1.FromAsyncTrim[TInstance,TArgs](TInstance thisRef, TArgs args, Func`5 beginMethod, Func`3 endMethod)
at System.IO.Stream.BeginEndReadAsync(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.Stream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
at System.Web.Http.WebHost.SeekableBufferedRequestStream.<ReadAsync>d__0.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.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at System.Net.Http.HttpContentMultipartExtensions.<MultipartReadAsync>d__8.MoveNext()
throw t.Exception;
сt.Wait()
. Това се справя по-добре с грешката и не унищожава съхранения стек. Вероятно така или иначе не трябва да използвате ContinueWith и да използвате await. - person usr   schedule 16.06.2015maxAllowedContentLength
ще върне състояние 404.13. разбирате ли това Това ограничение е ограничение на IIS, струва ми се, проблемът ви е във вашето приложение. Може биMultipartFormDataStreamProvider
има свои собствени ограничения. - person Peter Hahndorf   schedule 16.06.2015maxAllowedContentLength
няма нищо общо с ASP.Net, това е IIS нещо. Изключението е в System.Web.HttpBufferlessInputStream, което е ASP.Net. Не помня дали има отделна настройка за това. - person Peter Hahndorf   schedule 16.06.2015maxRequestLength
наsystem.web/httpRuntime
, по подразбиране е 4096, може да искате да разгледате това. - person Peter Hahndorf   schedule 16.06.2015