2013-03-22 90 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