1

IIS7 で実行されている asp.net 2.0 Web アプリケーションがあります。Web ガーデンと asp.net 状態サーバーを使用しています。

ページには、多くのユーザー コントロールがあります。ユーザー コントロールの 1 つで、メソッドが実行されるたびにログに行を書き込む button_click イベントのログを追加しました。ボタンをクリックすると、定期的にのみログ エントリが表示されます。これは、ボタンがクリックされたときにイベントが常に発生するとは限らないことを示しています。ボタンをクリックしたときにボタンクリックメソッドが常に実行されているとは限らないので、ログを追加しました。私たちが目にしている証拠は、私たちの疑いを裏付けているようです。

Web ガーデンを削除してサイトを 1 つのアプリケーション プールに戻すと、アプリケーションは通常の状態に戻ります (ボタン イベントが毎回発生します)。アプリケーションをローカルの開発者マシンで実行すると、正常に動作します。

他の誰かがこのような行動を見たことがありますか? 問題を絞り込むための次のステップに関する推奨事項はありますか?

編集:要求されたイベントのソースは次のとおりです。

protected void btnSearch_Click(object sender, EventArgs e)
    {
        Log.Error("Searching...");

        SearchArgs args = CtrlToSearchArgs();
        SessionManager.SearchQueryString = Request.QueryString;

        string url = NavigationManager.BuildSearchUrl(args, null, "*** page url removed here ***");

        if (args.PageSize.HasValue)
        {
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, args.PageSize.Value.ToString());
        }
        else
        {
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, "10");
        }

        SessionManager.SearchPanelData = url;

        //Set the new args into the session
        SessionManager.SearchControlArgs = args;

        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Redirect(url);
    }

編集 # 2: 明確化 - このセットアップは複数のサーバーを使用しておらず、ロード バランサーの下にもありません。単一のサーバーで複数の AppPools を使用しています。

4

3 に答える 3

1

マシン キーを設定します: http://msdn.microsoft.com/en-us/library/ms998288.aspx

これは、マシン キーが指定されていない場合に失敗する唯一のシナリオではありません。つまり、アプリ プールが再起動された場合、生成されたマシン キーが変更され、それに依存するすべてのものでエラーが発生します。ViewState MAC の ASP.NET MVC 検証に失敗しました

于 2009-10-19T16:35:22.947 に答える
0

ロードバランサーでスティッキーセッションを有効にすることをお勧めします。

過去に、ページがサーバーAによってレンダリングされたが、ポストバックがサーバーBに送信されたため、ポストバックの検証に失敗するという同様の状況が発生しました。

または、スティッキーセッションを使用する代わりに、MachineKeyをすべてのサーバーで同じになるように手動で設定することも検討してください。

于 2009-10-19T16:21:45.223 に答える
0

回答を投稿してくれた Freddy と Jason に感謝します。

トラブルシューティング プロセス中に、単一のアプリ プールに戻すことにしました。いずれにせよ、物事を構造化するのはかなり非正統的な方法のように思えました。ただし、それでも問題は解決しませんでした。

何度も何度もコードを確認した後、静的変数を含むオブジェクトがセッションに格納されていることを最終的に発見しました。その問題を修正したところ、サイトは期待どおりに機能し始めました。

于 2009-10-27T15:31:18.303 に答える