0

Microsoftの次のサンプルを使用してSession-StateProviderを実装しようとしています。

http://msdn.microsoft.com/en-us/library/ms178589.aspx

しかし、.NETがこのエラーをスローするため、コンパイルできません。

Error   1   
'Project.Session.OdbcSessionStateStore' does not implement inherited abstract member     'System.Web.SessionState.SessionStateStoreProviderBase.CreateNewStoreData(System.Web.HttpContext, int)'

Error   2   'Project.Session.OdbcSessionStateStore.CreateNewStoreData(System.Web.HttpContext, double)' is a new virtual member in sealed class 'Project.Session.OdbcSessionStateStore'

Error   3   'Project.Session.OdbcSessionStateStore.CreateNewStoreData(System.Web.HttpContext, double)': no suitable method found to override

CreateNewStoreDataオーバーライドを使用した正確なコード:

    //
    // SessionStateProviderBase.CreateNewStoreData
    //

    public override SessionStateStoreData CreateNewStoreData(
      HttpContext context,
      double timeout)
    {
        return new SessionStateStoreData(new SessionStateItemCollection(),
          SessionStateUtility.GetSessionStaticObjects(context),
          (int)timeout);
    }
4

2 に答える 2

2

サンプルに間違いがあります。基本クラスのメソッドシグネチャが定義される方法であるため、timeoutパラメータにintを使用するようにSessionStateStoreDataメソッドシグネチャを変更する必要があります。(このクラスは基本メソッドをオーバーライドするため、メソッドのシグネチャは同じである必要があります。)

      public override SessionStateStoreData CreateNewStoreData(
          HttpContext context,
          int timeout)

つまり、このメソッドに渡されるパラメーターがdoubleではなくintであることも確認する必要があります。サンプルクラスには、GetSessionStoreItemでの呼び出しが1つだけ含まれていると思います。次のように、値をintにキャストするだけです。

      if (actionFlags == SessionStateActions.InitializeItem)
          item = CreateNewStoreData(context, (int) pConfig.Timeout.TotalMinutes);
      else
          item = Deserialize(context, serializedItems, timeout);
于 2013-03-22T03:26:26.680 に答える
2

MSDNリンクから、クラスは抽象クラスOdbcSessionStateStoreから継承しています。詳細については、ここをクリックしてくださいSessionStateStoreProviderBase

抽象クラスのすべての抽象メソッドをオーバーライドする必要があるため(作成するクラスが抽象クラスでもある場合を除く)、この例では、抽象メソッドをオーバーライドする必要がありますCreateNewStoreData詳細については、ここをクリックしてください

メソッドのシグネチャをオーバーライドする場合は、一致する必要があります。MSDNリンクのサンプルコードでは、署名は次のとおりです。

public override SessionStateStoreData CreateNewStoreData(
      HttpContext context,
      double timeout)

実際の場合のように、

public override SessionStateStoreData CreateNewStoreData(
    HttpContext context,
    int timeout
)

double timeout代わりに違いに注意してくださいint timeout

于 2013-03-22T03:27:16.357 に答える