2017-01-02 58 views
1

我使用提琴手(或邮政经理)来调用我的WebApi的请求。 (其托管为在IIS中ASP.net应用程序)100K大小的POST请求无法访问webAPI?

这是该服务:

[HttpPost] 
    [ActionName("uploadRessources")] 
    [AllowAnonymous] 
    public HttpResponseMessage uploadRessources(ResourcesJson json) 
    { 
     ... 
     return Request.CreateResponse(HttpStatusCode.OK, result); 
    } 

对于短长度主体(3行数据)等长度后数据的请求:

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) -

enter image description here

被卡住(它甚至不命中断点在我的代码,而在短的请求 - 它),我从来没有看到一个响应:

enter image description here

BTW - 如果以后我再次​​运行短体长请求(同时仍在等待以前的大量请求) - 我确实得到了200(针对短的请求)。

在web.config中我没有设置:

<httpRuntime enableVersionHeader="false" executionTimeout="100000000" maxRequestLength="999999999" /> 

在IIS:没有要求过滤器
在事件查看器 - 我看不出有任何异常或警告 IIS版本:6.1(Windows 7)中 - 但它也发生在我们的服务器上。

问题

为什么我的101K长度的要求 - 让我的WebAPI?

编辑

我发现,它发生了> 65000个请求。仍然不知道是什么问题

+0

可以帮助你:[超过最大请求长度](http: //stackoverflow.com/a/3853785/3060520) –

+0

@ user3060520我发现它发生> 65k请求。仍然不知道为什么 –

+0

我发现了一些有关该问题的资源:[WCF:如何增加请求大小限制](http://fczaja.blogspot.com.tr/2011/06/wcf-how-to-increase- allowed-request.html) –

回答

0

它卡在request.Content.ReadAsStringAsync().Result(并且从未发布)。奇怪,但设置为异步,解决了这个问题。我仍然不知道为什么。 In General this is the solution - 左窗格是有问题的,而右窗格是工作窗格。 (我必须说,左窗格用于工作,但升级到4.6.2后 - 它开始出现问题) - 再次 - 我不知道为什么

0

这似乎是您的序列化程序的问题,试图在那里放置一个断点,看看是否命中它。如果您不使用自定义序列化程序,请暂时创建一个,以查看请求发生了什么。