2012-05-03 20 views
6

W ASP.NET MVC 4.0 WebAPI (wersja beta), zwracam obiekt, który jest serializowany do JSON, który jest większy niż 65kb. Jak widać na poniższym wykresie stosu, struktura rzuca wyjątek, ponieważ przekracza to pewien wewnętrzny limit.ASP.NET MVC 4 WebAPI (beta) - jak zmienić maksymalny rozmiar bufora odpowiedzi

System.Net.Http.HttpRequestException: Cannot write more bytes to the buffer than the configured maximum buffer size: 65536. 
    at System.Net.Http.HttpContent.LimitMemoryStream.CheckSize(Int32 countToAdd) 
    at System.Net.Http.HttpContent.LimitMemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) 
    at System.IO.StreamWriter.Write(Char value) 
    at Newtonsoft.Json.JsonWriter.AutoComplete(JsonToken tokenBeingWritten) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonWriter.cs:line 634 
    at Newtonsoft.Json.JsonTextWriter.WritePropertyName(String name) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextWriter.cs:line 204 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer, Object memberValue, JsonProperty property, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 209 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 336 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer, Object memberValue, JsonProperty property, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 209 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 336 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IWrappedCollection values, JsonArrayContract contract, JsonProperty member, JsonContract collectionValueContract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 445 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer, Object memberValue, JsonProperty property, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 209 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 336 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer, Object memberValue, JsonProperty property, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 209 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 336 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IWrappedCollection values, JsonArrayContract contract, JsonProperty member, JsonContract collectionValueContract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 445 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 59 
    at xxx.Api.JsonNetFormatter.<>c__DisplayClass5.<OnWriteToStreamAsync>b__4() in c:\xxx\xxx\xxx.Api\JsonNetFormatter.cs:line 79 
    at System.Threading.Tasks.Task.Execute() 

Nie mogę znaleźć żadnego sposobu na zmianę tej wartości domyślnej. Czy ktoś może pomóc?

dzięki

+0

Wypróbowałeś to: http://forums.asp.net/t/1795106.aspx/1?Ustawiono+więcej+wspomagania+wspomagania – syneptody

+0

@syneptody Nie używam domyślnego serializatora json, więc " m nie jestem pewien, czy to dotyczy. dzięki za link, tak czy inaczej, będzie mieć skrzypce na podstawie jego sugestii. – Andrew

+0

Czy możesz opublikować odpowiednie części swojej klasy 'JsonNetFormatter'? – nemesv

Odpowiedz

3

Według System.Net.Http.dll uwalnianego z nocnej źródła kod buduje, wartość max rozmiar bufora jest zdefiniowana w HttpContent jak:

internal const long MaxBufferSize = 0x7fffffffL; // 2147483647 

więc jeśli przełączanie do nowej wersji (zamiast do beta-instalatora) problem powinien zniknąć.

Proponuję, aby przełączyć się w każdym razie niezależnie od tego problemu, ponieważ istnieją sporo łamanie zmienia a co budują teraz jest gwarantowane nie pracować z ostatecznej wersji.

+0

dzięki - wygląda na to, co mam zamiar zrobić, niestety. – Andrew

+0

Czy praca przełączająca? Widzę dokładnie ten sam ślad stosu, ale nie używam żadnych wersji beta - o ile wiem. – PandaWood

Powiązane problemy