2

重複の可能性:
web.configでmaxJsonLengthに無制限の長さを設定できますか?

.aspxページに、バックエンドの.csページに情報を送信するスクリプトがあります。データが大きすぎる場合を除いて、概念は単純で、ほとんどの場合最悪です。web.configを変更せずに、「data」変数が保持できる容量を増やすにはどうすればよいですか?以下のコードを参照してください。

.ASPX

<script type="text/javascript">
    $(document).ready(function () {
        var note = "";
        for (var i = 0; i < 200000; i++)
            note = note + "x";

        $.ajax({
            type: "POST",
            url: "GroupDetailsDisplayPlus.aspx/UpdateRecord",
            data: "{note: \"" + note + "\"}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                var response = msg.d;
                alert("success");
                }
            error: function (request, status, thrownError) {
                //alert(request.thrownError); // short version
                alert(request.responseText);  // long version
            }
        });
    });
</script>

.CS

    [System.Web.Services.WebMethod]
    public static string UpdateRecord(string note)
    {
        return note;
    }

このコードは単純化されており、私の目的はこの大きな文字列をデータベースに格納することです(コードは省略されています)。forループを100,000サイクルのみ実行するように設定すると、これは機能します。ただし、200,000サイクルに増やすと、エラーメッセージが表示されて失敗します。

{"メッセージ":"JSONJavaScriptSerializerを使用したシリアル化または逆シリアル化中にエラーが発生しました。文字列の長さがmaxJsonLengthプロパティに設定された値を超えています。\r \ nパラメータ名:input"、 "StackTrace":System.Web.Scriptで。 Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer、String input、Type type、Int32depthLimit)\ r \ n at System.Web.Script.Serialization.JavaScript Serializer.Deserialize [T](String input)\ r \ n at System.Web .Script.Service.RestHandler.ExecuteWebServiceCall(HttpContext context、WebServiceMethodData methodData) "、" ExceptionType ":" System.ArgumentException "}

助けてくれてありがとう。

4

1 に答える 1

11

これを試して:

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

この:

<system.web>
  <httpRuntime requestValidationMode="2.0" executionTimeout="600" maxRequestLength="2000000" />
<system.web>

または、データを分割して部分ごとに送信します。

var portionIndex = 0;
var porions = new Array();
for(i = 0; i < 5; i++)
{
    var note = '';
    for (var j = 0; j < 40000; j++) note += "x";
    portions.push(note);
}

SendPortion();

function SendPortion()
{
        $.ajax({
            type: "POST",
            url: "GroupDetailsDisplayPlus.aspx/UpdateRecord",
            data: {porionsCount: porions.length, portion: porions[portionIndex] },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                portionIndex++; 
                if(portionIndex < porions.length) 
                    SendPortion();
            }
            error: function (request, status, thrownError) {}
        });
}
于 2012-11-21T18:05:54.710 に答える