2013-03-22 4 views
0

Я пытаюсь реализовать Session-State Provider, используя этот образец от Microsoft:Пример состояния сеанса магазин поставщика - Microsoft Пример

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, класс OdbcSessionStateStore наследует от SessionStateStoreProviderBase абстрактного класса. Click Here для получения дополнительной информации

Как вам придется переопределить все абстрактные методы из абстрактного класса (за исключением, если класс, который вы создаете также абстрактный класс), в этом примере, вам нужно будет переопределить абстрактный метод CreateNewStoreData. Click 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

2

Ошибка в образце. Вам нужно будет изменить подпись метода SessionStateStoreData, чтобы использовать int для параметра таймаута, так как это the method signature in the base class is defined. (Этот класс переопределяет базовый метод, поэтому метод подпись должна быть одинаковой.)

 public override SessionStateStoreData CreateNewStoreData(
      HttpContext context, 
      int timeout) 

Это означает, что вы должны будете также обеспечить параметр, передаваемый в этот метод является INT, а не в два раза. Я считаю, что образец класса содержит только один вызов, в GetSessionStoreItem. все, что вам нужно сделать, это привести значение к междунар, например:

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

Thx вам тоже! – nikoskip

Смежные вопросы