C# 会话状态存储提供程序示例-Microsoft示例
我正在尝试使用Microsoft提供的以下示例实现会话状态提供程序: 但我无法编译它,因为.NET会抛出以下错误: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
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