100K 大小的 POST 请求无法到达 webAPI?
100K sized POST requests don't get to webAPI?
我正在使用 Fiddler(或 post 管理器)调用对我的 WebApi 的请求。 (它在 IIS 中作为 ASP.net 应用程序托管)
这是服务:
[HttpPost]
[ActionName("uploadRessources")]
[AllowAnonymous]
public HttpResponseMessage uploadRessources(ResourcesJson json)
{
...
return Request.CreateResponse(HttpStatusCode.OK, result);
}
对于短长度正文(3 行数据)长度 post 数据请求,如:
POST http://something.com/api/services/uploadRessources HTTP/1.1
Cache-Control: no-cache
Connection: keep-alive
Pragma: no-cache
Accept: application/json
Accept-Encoding: gzip
Accept-Language: he-IL
User-Agent: Mozilla/5.0
Content-Length: 451
Content-Type: application/json
Host: es.com
{ "l":
[{"MasterEntity":2,"screen":"ConfirmHealthDetailsPage","Lbl":"ApproveTheFollowingDetails","enus":"Approve the Following Details:","device":"mobile","description":"NULL"},
{"MasterEntity":2,"screen":"ConfirmHealthDetailsPage","Lbl":"PersonalDetails","enus":"Personal Details","device":"mobile","description":"NULL"},
{"MasterEntity":2,"screen":"FingerPrintResources","Lbl":"CANCEL","enus":"CANCEL","device":"mobile","description":"NULL"}]
}
我确实得到了成功的回应:
HTTP/1.1 200 OK
但对于较长的正文长度请求 (101K) -
它被卡住了(它甚至没有在我的代码中达到断点,而在简短的请求中 - 它确实如此)并且我从未看到响应:
顺便说一句 - 如果稍后我再次 运行 短体长度请求(同时仍在等待之前的大请求) - 我确实得到 200(对于短长度请求)。
在 web.config 我确实设置了:
<httpRuntime enableVersionHeader="false" executionTimeout="100000000" maxRequestLength="999999999" />
在 IIS 中:没有请求过滤器
在事件查看器中 - 我没有看到任何异常或警告
IIS 版本:6.1(windows 7)- 但它也发生在我们的服务器上。
问题
为什么我的 101k 长度请求没有到达我的 webapi?
编辑
我发现超过 65k 的请求会发生这种情况。还是不知道是什么问题
这似乎是您的序列化程序的问题,尝试在此处放置一个断点并查看是否命中它。如果您没有使用自定义序列化程序,请临时创建一个以查看您的请求发生了什么。
它被卡在 request.Content.ReadAsStringAsync().Result
上(并且从未发布)。奇怪但将其设置为 async ,解决了问题。我仍然不知道为什么。 In General this is the solution - 左窗格是有问题的窗格,而右窗格是工作窗格。 (我必须说左窗格曾经工作,但在升级到 4.6.2 之后 - 它开始出现问题) - 再一次 - 我不知道为什么
我正在使用 Fiddler(或 post 管理器)调用对我的 WebApi 的请求。 (它在 IIS 中作为 ASP.net 应用程序托管)
这是服务:
[HttpPost]
[ActionName("uploadRessources")]
[AllowAnonymous]
public HttpResponseMessage uploadRessources(ResourcesJson json)
{
...
return Request.CreateResponse(HttpStatusCode.OK, result);
}
对于短长度正文(3 行数据)长度 post 数据请求,如:
POST http://something.com/api/services/uploadRessources HTTP/1.1
Cache-Control: no-cache
Connection: keep-alive
Pragma: no-cache
Accept: application/json
Accept-Encoding: gzip
Accept-Language: he-IL
User-Agent: Mozilla/5.0
Content-Length: 451
Content-Type: application/json
Host: es.com
{ "l":
[{"MasterEntity":2,"screen":"ConfirmHealthDetailsPage","Lbl":"ApproveTheFollowingDetails","enus":"Approve the Following Details:","device":"mobile","description":"NULL"},
{"MasterEntity":2,"screen":"ConfirmHealthDetailsPage","Lbl":"PersonalDetails","enus":"Personal Details","device":"mobile","description":"NULL"},
{"MasterEntity":2,"screen":"FingerPrintResources","Lbl":"CANCEL","enus":"CANCEL","device":"mobile","description":"NULL"}]
}
我确实得到了成功的回应:
HTTP/1.1 200 OK
但对于较长的正文长度请求 (101K) -
它被卡住了(它甚至没有在我的代码中达到断点,而在简短的请求中 - 它确实如此)并且我从未看到响应:
顺便说一句 - 如果稍后我再次 运行 短体长度请求(同时仍在等待之前的大请求) - 我确实得到 200(对于短长度请求)。
在 web.config 我确实设置了:
<httpRuntime enableVersionHeader="false" executionTimeout="100000000" maxRequestLength="999999999" />
在 IIS 中:没有请求过滤器
在事件查看器中 - 我没有看到任何异常或警告
IIS 版本:6.1(windows 7)- 但它也发生在我们的服务器上。
问题
为什么我的 101k 长度请求没有到达我的 webapi?
编辑
我发现超过 65k 的请求会发生这种情况。还是不知道是什么问题
这似乎是您的序列化程序的问题,尝试在此处放置一个断点并查看是否命中它。如果您没有使用自定义序列化程序,请临时创建一个以查看您的请求发生了什么。
它被卡在 request.Content.ReadAsStringAsync().Result
上(并且从未发布)。奇怪但将其设置为 async ,解决了问题。我仍然不知道为什么。 In General this is the solution - 左窗格是有问题的窗格,而右窗格是工作窗格。 (我必须说左窗格曾经工作,但在升级到 4.6.2 之后 - 它开始出现问题) - 再一次 - 我不知道为什么