2013-03-22 55 views
0

我试图实现使用此示例微软的会话状态提供:样品会话状态存储提供商 - 微软实例

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); 
    } 

回答

2

从您的MSDN链接,类OdbcSessionStateStoreSessionStateStoreProviderBase抽象类继承。 Click Here获取更多信息

由于您必须重写抽象类中的所有抽象方法(除非您创建的类也是抽象类),在本例中,您将需要重写抽象方法CreateNewStoreDataClick Here获取更多信息

重写方法签名时应该匹配。在从MSDN链接样例代码签名

public override SessionStateStoreData CreateNewStoreData(
     HttpContext context, 
     double timeout) 

,其中在实际情况下,它应该是

public override SessionStateStoreData CreateNewStoreData(
    HttpContext context, 
    int timeout 
) 

double timeout代替int timeout

+0

Thx很多,你解决了我的问题。 – nikoskip 2013-04-28 18:56:05

2

样本中存在错误。您需要更改方法签名的SessionStateStoreData以使用int作为超时参数,因为这就是the method signature in the base class is defined。 (本类重写基方法,因此该方法的签名必须相同)。

 public override SessionStateStoreData CreateNewStoreData(
      HttpContext context, 
      int timeout) 

这意味着你还必须确保传递给此方法的参数是一个int,而不是一个双。我相信示例类只包含一个调用它的GetSessionStoreItem。所有你所要做的就是将值转换为int,像这样:

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

THX在你身上的与众不同! – nikoskip 2013-04-28 18:56:23