我在WinSrv 2012 R2和IIS 8.5上托管ASP.NET Web Api。
web api在控制器中有一个动作,它接收一个json对象 - 为了讨论,它看起来像这样:
[HttpPost, "api/action"]
ResponseModel GetIt(RequestModel requestData)
除非我尝试发布大的数据,否则效果很好。例如,当我尝试发布8Mb的json(它包括base64编码的图像文件)。
它如何失败是相当有趣的。基本上,操作被调用但模型(RequestModel)缺少某些键属性。让我相信,反序列化对象时会出现错误,但我不会这样做。看到了。我的Web API操作立即引发异常,因为它获取了一些键空值。
我在IIS中启用了FailedRequestTracking,我看到以下内容:
请求包含以下标题:
- 缓存控制:无存储,无缓存
- 连接:Keep-Alive
- 内容长度:12262199
- Content-Type:application / json;字符集= UTF-8
- 接受:application / json
- 期待:100-continue
在这种情况下,对象是~12MB。各种处理程序匹配开始,最终IIS在ManagedPipelineHandler
上结算以处理请求。它读取16,384个字节,然后再次读取16,384个字节,最后一次读取16,384个字节,您将看到NOTIFY_MODULE_COMPLETION
条目。
我看到AspNetHttpHandlerEnter
事件,在设置响应标头后,我看到了异常的500错误。 MODULE_SET_RESPONSE_ERROR_STATUS
有谁知道为什么ManagedPipelineHandler
只读48K?我需要能够发布高达25Mb的数据。