8

使用する前にベースページクラスにSessionが存在するかどうかを確認したいのですが、存在しない場合は、次のことを確認するだけで例外がスローされることがわかりました。

if (Session != null)
{
    Session.Remove("foo");
}

この例外をスローします:

セッション状態は、構成ファイルまたはPageディレクティブのいずれかでenableSessionStateがtrueに設定されている場合にのみ使用できます。また、System.Web.SessionStateModuleまたはカスタムセッション状態モジュールがアプリケーション構成の\\セクションに含まれていることを確認してください。

このチェックは、すべてのaspxページの派生元であるベースページクラスのLoadイベントで行われます。アプリでセッションが有効になっており、httpModulesノードにモジュールがリストされています。これは、セッションを頻繁に使用するアプリで、通常は問題ありません。

このエラーは特定のページでのみ発生し、ほとんどの場合、信頼性がありません。エラーを防ぐために別のことをする必要があることはわかっていますが、何がわかりませんか?

ライフサイクルの早い段階でセッションを呼び出しているのでしょうか。セッションが利用可能かどうかを正しくチェックしていませんか?

4

5 に答える 5

10

次のようなメソッドを使用して、現在のリクエストがセッションを使用しているかどうかを判断できます。

    public static bool RequestHasSession
    {
        get
        {
            return (HttpContext.Current.Handler is IRequiresSessionState);
        }
    }

Web コンテキストで実行していることさえわからない場合は、事前に HttpContext.Current が null でないことを確認する必要があります。

于 2009-07-14T13:58:19.340 に答える
3

チェックをより安全にすることができます - Page.Session は Context.Session プロパティの周りに null チェックをラップします。したがって、Context.Session を取得して、それが null かどうかを確認できるはずです。その場合、セッション状態は利用できません。

しかし、それは Page_Load() で利用できるはずなので、他の場所で問題を指摘しています:)

于 2009-07-14T13:39:09.537 に答える
0

特定のセッション変数がnullであるために例外が発生していませんが、セッション状態サーバーと通信するように構成されていないページでセッションロジックを使用するだけです(実際には別のマシンである場合に意味があります)。 。問題がない場合は、enableSessionStateが常にtrueに設定されていることを確認してください。

于 2009-07-14T13:30:52.493 に答える
0

enableSessionStatePage ディレクティブのプロパティでエラーが発生しているページを確認しましたか? これを行うには、.aspx ページに移動し、enableSessionStateプロパティが true/false に設定されているかどうかを確認します。に設定されている場合はfalse、 にしtrueます。

また、タグの web.config ファイルをチェックインし、<pages />それを更新して -

<pages enableSessionState="true" />

参考:こちら

于 2009-07-14T13:32:56.783 に答える
0

HttpContext.Current.Session、またはさらにチェックしてみてくださいHttpContext.Current(コンポーネントがASP.NETから呼び出されると、それらの変数を取得しましたが、NUNITからそれらを呼び出すと、それらが利用できなくなります)

于 2009-07-14T13:39:40.503 に答える