5

最近、自分のサイトに ELMAH を実装しましたが、「Base-64 文字列に無効な文字があります」というエラーが頻繁に発生することに気付きました。私は自分でそれをトリガーしたことはなく、ユーザーの誰もそれについて不満を述べていないので、何が起こっているのかわかりません. 私が見つけた小さなことから、ビューステートが大きくなりすぎたり、破損したりしている可能性があるようです。これの原因とそれを防ぐ方法を知っている人はいますか?これが、YSOD の適切な行であると私が信じているものです。

[FormatException: Invalid character in a Base-64 string.]
[ViewStateException: Invalid viewstate. 
[HttpException (0x80004005): The client disconnected.]

これらのエラーについて私ができることはありますか、それとも ELMAH でそれらをフィルタリングする必要がありますか?

4

2 に答える 2

4

私の経験では、このエラーは、ポストバックをトリガーするボタンをユーザーがダブルクリックしたことが原因である傾向があります。2 番目のポストバック要求は、最初の要求をキャンセルします。最初のリクエストのビューステートは部分的にしか送信されていないため無効ですが、ブラウザーが切断されているため、エラーをブラウザーに送信できず、トップレベルのエラーがトリガーされます。ユーザーが何かを 2 回行って問題が発生した場合、これはより大きな問題になる可能性があります。それ以外の場合、これらのエラーは単純にフィルタリングできます。ELMAH で同様のエラーを除外する良い例を次に示します: https://stackoverflow.com/a/2549509/267448

ASP.NET WebForms を使用している場合、ポストバック中にトリガー コントロールを無効にするコードを次に示し ます。 /

HTML <input type="submit"> ボタンを無効にすると、フォーム変数から除外されるため、サーバー側の Click イベントが発生しないことに注意してください。<input type="button"> に変更すると修正されます。WebForms では、<asp:Button UseSubmitBehavior="False" /> になります。

上記は WebForms AJAX ページで動作しますが、他のページ用に私が思いついた jQuery も少しあります。

$(function () {
    $("a[href^='javascript']").click(function (event) {
        if (event.target.disabled)
            return false;
        event.target.disabled = true;
        setTimeout(function () {event.target.disabled = false;}, 250);
    });
});
于 2012-02-14T17:07:14.107 に答える
2

それは物事がどのように構成されているかかもしれません。これを見てください:

http://groups.google.com/group/elmah/browse_thread/thread/ec9c4bdddaa1a9e/9108b48d3def87db?lnk=gst&q=viewstate+elmah#9108b48d3def87db

アップデート

それが発生している場所を特定してみてください。いくつかの潜在的な原因が考えられます。

ASP.NETおよびC#を使用した「Base-64文字列の無効な文字」

asp.netBase-64文字列の無効な文字

結局のところ、あなたが言うように、それが本番環境で問題を引き起こしていないのであれば、これらのエラーを除外することができます。EnableViewStateMacをfalseに設定してみてください。

于 2011-01-26T22:08:34.040 に答える