C# 会话状态存储提供程序示例-Microsoft示例

C# 会话状态存储提供程序示例-Microsoft示例,c#,.net,session,session-state,C#,.net,Session,Session State,我正在尝试使用Microsoft提供的以下示例实现会话状态提供程序: 但我无法编译它,因为.NET会抛出以下错误: Error 1 'Project.Session.OdbcSessionStateStore' does not implement inherited abstract member 'System.Web.SessionState.SessionStateStoreProviderBase.CreateNewStoreData(System.Web.Http

我正在尝试使用Microsoft提供的以下示例实现会话状态提供程序:

但我无法编译它,因为.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);
    }

样品中有个错误。您需要将SessionStateStoreData方法签名更改为使用int作为超时参数,因为这就是为什么。(此类重写基方法,因此方法签名必须相同。)

这意味着您还必须确保传递给此方法的参数是int,而不是double。我相信示例类只包含一个对它的调用,即GetSessionStoreItem。您只需将值强制转换为int,如下所示:

      if (actionFlags == SessionStateActions.InitializeItem)
          item = CreateNewStoreData(context, (int) pConfig.Timeout.TotalMinutes);
      else
          item = Deserialize(context, serializedItems, timeout);

样品中有个错误。您需要将SessionStateStoreData方法签名更改为使用int作为超时参数,因为这就是为什么。(此类重写基方法,因此方法签名必须相同。)

这意味着您还必须确保传递给此方法的参数是int,而不是double。我相信示例类只包含一个对它的调用,即GetSessionStoreItem。您只需将值强制转换为int,如下所示:

      if (actionFlags == SessionStateActions.InitializeItem)
          item = CreateNewStoreData(context, (int) pConfig.Timeout.TotalMinutes);
      else
          item = Deserialize(context, serializedItems, timeout);

从MSDN链接中,类
OdbcSessionStateStore
继承自
SessionStateStoreProviderBase
抽象类。更多信息

由于您必须重写抽象类中的所有抽象方法(除非您创建的类也是抽象类),因此在本例中,您需要重写抽象方法
CreateNewStoreData
。更多信息

重写方法时,签名应匹配。在MSDN链接的示例代码中,签名为

public override SessionStateStoreData CreateNewStoreData(
      HttpContext context,
      double timeout)
在实际情况中,应该是

public override SessionStateStoreData CreateNewStoreData(
    HttpContext context,
    int timeout
)

请注意,类
OdbcSessionStateStore
继承自
SessionStateStoreProviderBase
抽象类,而不是MSDN链接中的
双超时
而不是
int超时

。更多信息

由于您必须重写抽象类中的所有抽象方法(除非您创建的类也是抽象类),因此在本例中,您需要重写抽象方法
CreateNewStoreData
。更多信息

重写方法时,签名应匹配。在MSDN链接的示例代码中,签名为

public override SessionStateStoreData CreateNewStoreData(
      HttpContext context,
      double timeout)
在实际情况中,应该是

public override SessionStateStoreData CreateNewStoreData(
    HttpContext context,
    int timeout
)
注意差异
double timeout
而不是
int timeout