2013-09-04 24 views
5

Używam wtyczki odwzorowania KnockoutJS do konwersji mojego modelu do obiektów Knockout. Ale mam problemy z wysyłaniem dużego obiektu Json z powrotem na serwer. Moje ajax wywołanie wygląda tak:Wysyłanie dużego obiektu JSON do ASP.NET MVC

$.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); 
    } 
}); 

Wykonanie tego skryptu nie uderza działań w kontrolerze DoStuff. Kiedy sprawdzam z Firebug, POST po prostu się kręci. W zakładce Net programu Firebug jest napisane, że treść postu to 159,9 KB, a całkowita liczba wysłanych to 165,1 KB (łącznie z nagłówkami). Jeśli został wysłany, dlaczego nie trafia mój punkt przerwania w kod?

Ale gdy zamiast tego wyślę tylko właściwość myObjectViewModel, poczta będzie w porządku i wszystko się powiedzie. Prowadzi mnie to do wniosku, że problem dotyczy rozmiaru publikowanych danych. Próbowałem więc zwiększyć wartość maxJsonLength.

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

To nie pomogło.

Czy jest coś jeszcze, co powinienem robić?

Odpowiedz

7

Domyślam się, że mój obiekt przekroczył maksymalną liczbę członków ASP.NET został dopuszczony do deserializacji. Dodałem poniżej, aby go zwiększyć i działa.

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

AKTUALIZACJA: Było w tym coś więcej, ponieważ po tym, jak zadziałało, w końcu przestał działać z powodu braku uzasadnienia. Firebug ponownie wyświetliłby słupek, który kręciłby się bez klikania kodu na końcu. Dopiero po zamknięciu Firefoksa, zabiciu procesu IIS Express i zamkniętym Visual Studio, post zaczął działać ponownie. Ale zamykanie VS wydaje się kluczowe. Po ponownym uruchomieniu, zmianie kodu i ponownym uruchomieniu aplikacji sprawi, że problem pojawi się ponownie. Gdy wystąpi problem, nawet twarde odświeżenie nie załaduje strony. Po prostu siedzieć i kręcić się. Strona przeładuje się dopiero po zakończeniu procesu IIS Express i ponownym uruchomieniu z VS.

Więc rzuciłem IIS Express i użyłem zamiast tego pełnego IIS na moim komputerze. Wygląda na to, że rozwiązuje problem. Publikowanie dużych danych json przechodzi za każdym razem bezbłędnie ... nawet po zmianie kodu i rekompilacji.

Wydaje się, że IIS Express obsługuje wysyłanie niewielkich ilości jsonów, ale dławiki na większych zestawach. Nie przetestowałem wystarczająco dokładnie, aby to potwierdzić w 100%, ale wiem, że wydajność jest bardziej niezawodna w przypadku pełnego IIS. Nie testowałem jednak wewnętrznego serwera sieci VS.

Środowisko: Windows 8, Visual Studio 2012 Update 3

2

może trzeba wpadać rodzajowego maximum request length (w kilobajtach, przykładem jest 1GB)

<configuration> 
    <system.web> 
    <httpRuntime maxRequestLength="1048576" /> 
    </system.web> 
</configuration> 

A jeśli używasz IIS 7, prawdopodobnie wpadać max content length (w bajtach, przykładem jest 1GB)

<system.webServer> 
    <security> 
    <requestFiltering> 
     <requestLimits maxAllowedContentLength="1073741824" /> 
    </requestFiltering> 
    </security> 
</system.webServer> 
+0

Używam IIS Express. Dzięki, spróbowałem obu, ale wciąż nie dostaję się na serwer. – nthpixel

0

miałem ten sam problem zamieszczaniu dużych danych model obiektowy (JSON) od strony klienta do działania kontrolera Server. dodanie poniższych ustawień do konfiguracji działało poprawnie. dzięki.

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

Mijam duże dane JSON, które zawierają prawie 1,50 000 000 znaków do mojego kontrolera, z poniższymi zmianami w Internecie.config:

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

To działa na mnie bardzo ładnie .....

Powiązane problemy