2009-06-25 8 views
15

jQueryの$ .ajax()関数を使用してクライアントに送信している大量のデータがあります。 JSONデータを返すASP.NET Webサービスのメソッドを呼び出しています。大部分の検索ではすべてが素晴らしいですが、返すデータセットが大量になったら、JavaScriptSerializer MaxJsonLengthプロパティの問題が発生します。これを処理するベストプラクティスは何ですか?私はちょうど最大長を任意に設定したくありません。返されるデータが現在の最大値よりも大きい場合、またはクライアントにデータのチャックを書き換えて送信する必要がある場合、WebサービスでMaxJsonLengthを設定できますか?ここでJavaScriptSerializer.MaxJsonLengthを超えました。これを処理するベストプラクティスは何ですか?

は、Webサービスから関連するスニペットです:

Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>(); 
//add some data to the dictionary... 
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs); 

答えて

32

クライアントスクリプトから呼び出されたWebメソッドの最大長を設定する唯一の方法は、web.configファイル(下記)を介してです。 設定時の問題点は何ですか? 私はデータの一部をストリームするために複数のxhr呼び出しのたびにこれを行います。

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

UPDATE:デフォルトサイズは2097152です。これは4MBのUnicode文字列データに相当します。あなたは本当に多くのデータをクライアントに送り返しますか?もしそうならば、ユーザーエクスペリエンスが遅くて面倒なので、アプリのデザインを見る必要があります。

+1

web.configで最大長を設定することは問題ありません。これがベストプラクティスかどうか疑問に思っていました。私は、私が指定した最大長よりも多くのデータがあるかもしれない場合から自分自身を守りたいと思っています。 –

+0

あなたの質問は、 "私はあなたがweb.configで意味すると仮定した"私はちょうど任意の最大長を設定したくありません "と述べた。 – redsquare

+0

混乱して申し訳ありません。私はデータの最大サイズがわからない。私は、JavascriptSerializerオブジェクトを使用しない方法を検討します。 –

5

this forum postによると、このプロパティの最大値は2147483647です。

私は戻ってくるデータを最適化するのに時間を費やすことはありませんでしたが(誰も見ていないうちにやっています)、この値を設定すると、IEは私に 'あまりにも長い間あなたはそれを殺したいのですか?

解決策はデータをチャンクすることです。これを行うには(jQueryで)理想的です。もちろん、成功ハンドラで別のAjaxコールを行うこともできます。

10

2147483647は、使用する正しい値です。ちょうどあなたが

var JsonSerializer = new JavaScriptSerializer(); 
JsonSerializer.MaxJsonLength = Int32.MaxValue; 
3

最大許容長さのようなものを使用することができ、コードの混乱を避けるためであることを起こる整数が保持できる最大値である - 2147483647

0

は、web.configファイルにこのスニペットを追加するには:

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

とあなたのC#コードで:

JavaScriptSerializer jss = new JavaScriptSerializer(); 
jss.MaxJsonLength = Int32.MaxValue; 
... 
... 
関連する問題