Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Posting a large JSON object to ASP.NET MVC

I'm using KnockoutJS's mapping pluggin to convert my model into Knockout objects. But I'm having issues sending the large json object back to the server. My ajax call looks like this:

$.ajax({
    url: "/home/DoStuff",
    type: "POST",
    data: JSON.stringify({ deal: ko.toJS(myObjectViewModel) }),
    contentType: "application/json",
    dataType: "json",
    success: function (result) {
        console.log(result);
    },
    error: function (xhr, status, message) {
        console.log(xhr);
    }
});

Executing this script never hits the DoStuff action in the controller. When I inspect with Firebug, the POST just keeps spinning. In the Net tab of Firebug, it says the Post Body is 159.9 KB and Total Sent is 165.1 KB (including the headers). If it was sent, why is it not hitting my breakpoint in the code?

But when I instead send just a property of myObjectViewModel, it posts fine and everything is successful. So that leads me to assume the issue is with the size of the data being posted. So I tried increasing the maxJsonLength.

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483644"></jsonSerialization>
        </webServices>
    </scripting>
</system.web.extensions>

This didn't help.

Is there something else I should be doing?

like image 520
nthpixel Avatar asked Sep 04 '13 19:09

nthpixel


2 Answers

I guess my object exceeded the maximum number of members ASP.NET was allowed to deserialize. I added the below to increase it and it works.

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

UPDATE: So there was more to it because after I got it working, eventually it would stop working for what seems to be no reason. Firebug would again show the post just spinning without it hitting the code on the back end. Only after I closed Firefox, killed the IIS Express process and closed Visual Studio, did the post start working again. But closing VS seems to be key. After I got it working again, changing the code and re-running the app make the issue re-appear. When the issue occurs, not even a hard refresh will load the page. It'll just sit there spinning. The page will only reload after I kill the IIS Express process and rerun from VS.

So I dumped IIS Express and used full IIS on my machine instead. Looks like this solves the problem. Posting the large json data goes through every time without fail...even after changing code and recompiling.

IIS Express seems to handle posting small amounts of json fine but chokes on larger sets. I haven't tested thoroughly enough to 100% confirm this but I do know performance is more reliable with full IIS. Haven't tested VS's internal web server though.

Environment: Windows 8, Visual Studio 2012 Update 3

like image 117
nthpixel Avatar answered Nov 15 '22 23:11

nthpixel


I had the same issue Posting large model object data (JSON) from client side to Server controller action. adding the below settings to config worked fine. thanks.

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>
like image 23
Raj Avatar answered Nov 15 '22 23:11

Raj