Поделиться через


SessionStateStoreProviderBase Класс

Определение

Задает необходимых членов поставщика состояния сеанса для хранилища данных.

public ref class SessionStateStoreProviderBase abstract : System::Configuration::Provider::ProviderBase
public abstract class SessionStateStoreProviderBase : System.Configuration.Provider.ProviderBase
type SessionStateStoreProviderBase = class
    inherit ProviderBase
Public MustInherit Class SessionStateStoreProviderBase
Inherits ProviderBase
Наследование
SessionStateStoreProviderBase

Примеры

Пример реализации поставщика хранилища состояния сеанса см. в разделе Реализация поставщика хранилища Session-State.

В следующем примере кода показан файл Web.config для приложения ASP.NET, настроенного для использования пользовательского поставщика хранилища состояний сеансов.

<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
             type="Samples.AspNet.Session.OdbcSessionStateStore"
             connectionStringName="OdbcSessionServices" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

Комментарии

ASP.NET состояние сеанса считывает и записывает данные сеанса из хранилища данных и в хранилище данных с помощью поставщика хранилища состояний сеансов. Поставщик хранилища состояний сеанса — это класс, который наследует SessionStateStoreProviderBase абстрактный класс и переопределяет его члены реализациями, характерными для хранилища данных. Поставщик хранилища состояний сеанса вызывается классом SessionStateModule во время обработки страницы ASP.NET для связи с хранилищем данных для хранения и получения переменных сеанса и связанных сведений о сеансе, таких как значение времени ожидания.

Данные сеанса в каждом ASP.NET приложении хранятся отдельно для каждого SessionID свойства. ASP.NET приложения не используют данные сеанса.

Можно указать пользовательскую SessionStateStoreProviderBase реализацию для приложения ASP.NET, задав mode атрибуту sessionState элемента Custom конфигурации значение , а customProvider атрибуту — имя настраиваемого поставщика, как показано в примере для этого раздела.

Блокировка данных хранилища сеансов

Так как ASP.NET приложения многопоточные для поддержки ответа на параллельные запросы, возможно, что параллельные запросы могут попытаться получить доступ к одной и той же информации сеанса. Рассмотрим сценарий, в котором несколько кадров в наборе кадров обращаются к одному и тому же приложению. Отдельные запросы для каждого кадра в наборе фреймов могут выполняться на веб-сервере одновременно в разных потоках. Если ASP.NET страницы для каждого источника кадра получают доступ к переменным состояния сеанса, то может быть несколько потоков, обращаюющихся к хранилищу сеансов одновременно.

Чтобы избежать конфликтов данных в хранилище сеансов и непредвиденного поведения состояния сеанса, классы и SessionStateStoreProviderBase включают функции блокировки, SessionStateModule которые блокируют исключительно элемент хранилища сеансов для определенного сеанса на время выполнения страницы ASP.NET. Обратите внимание, что даже если EnableSessionState атрибут помечен как ReadOnly, другие ASP.NET страницы в том же приложении могут выполнять запись в хранилище сеансов, поэтому запрос данных сеанса только для чтения из хранилища может по-прежнему ожидать освобождения заблокированных данных.

Блокировка устанавливается для данных хранилища сеансов в начале запроса в вызове GetItemExclusive метода . После завершения запроса блокировка освобождается во время вызова SetAndReleaseItemExclusive метода .

SessionStateModule Если объект обнаруживает заблокированные данные сеанса во время вызова GetItemExclusive метода или GetItem , он будет повторно запрашивать данные сеанса через полсекундных интервалов, пока блокировка не будет снята или количество времени, в течение которого данные сеанса были заблокированы, не превысит значение ExecutionTimeout свойства . Если превышено время ожидания выполнения, SessionStateModule объект вызовет ReleaseItemExclusive метод , чтобы освободить данные хранилища сеансов и запросить данные хранилища сеансов в это время.

Так как заблокированные данные хранилища сеансов могли быть освобождены вызовом ReleaseItemExclusive метода в отдельном потоке перед вызовом SetAndReleaseItemExclusive метода для текущего ответа, можно попытаться установить и освободить данные хранилища состояний сеанса, которые уже были освобождены и изменены другим сеансом. Чтобы избежать этой ситуации GetItem , методы и GetItemExclusive возвращают идентификатор блокировки. Этот идентификатор блокировки должен включаться в каждый запрос на изменение заблокированных данных хранилища сеансов. Данные хранилища сеансов изменяются, только если идентификатор блокировки в хранилище данных совпадает с идентификатором блокировки, предоставленным SessionStateModule.

Удаление данных хранилища сеансов с истекшим сроком действия

При вызове Abandon метода для определенного сеанса данные для этого сеанса удаляются из хранилища данных с помощью RemoveItem метода . В противном случае данные останутся в хранилище данных сеанса для последующих запросов сервера к сеансу. Удаление данных сеанса с истекшим сроком SessionStateStoreProviderBase действия выполняется реализацией.

Конструкторы

SessionStateStoreProviderBase()

Инициализирует новый экземпляр класса SessionStateStoreProviderBase.

Свойства

Description

Возвращает краткое, понятное описание, подходящее для отображения в инструментах администрирования или других пользовательских интерфейсах (UI).

(Унаследовано от ProviderBase)
Name

Возвращает понятное имя, используемое для ссылки на поставщика во время конфигурирования.

(Унаследовано от ProviderBase)

Методы

CreateNewStoreData(HttpContext, Int32)

Создает новый объект SessionStateStoreData, который необходимо использовать для текущего запроса.

CreateUninitializedItem(HttpContext, String, Int32)

Добавляет новый элемент состояния сеанса в хранилище данных.

Dispose()

Освобождает все ресурсы, используемые реализацией SessionStateStoreProviderBase.

EndRequest(HttpContext)

Вызывается объектом SessionStateModule в конце запроса.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetItem(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions)

Возвращает доступные только для чтения данные о состоянии сеанса из хранилища данных сеанса.

GetItemExclusive(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions)

Возвращает доступные только для чтения данные о состоянии сеанса из хранилища данных сеанса.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
Initialize(String, NameValueCollection)

Инициализирует построитель конфигураций.

(Унаследовано от ProviderBase)
InitializeRequest(HttpContext)

Вызывается объектом SessionStateModule для инициализации по запросу.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ReleaseItemExclusive(HttpContext, String, Object)

Снимает блокировку элемента в хранилище данных сеанса.

RemoveItem(HttpContext, String, Object, SessionStateStoreData)

Удаляет данные об элементе из хранилища данных сеанса.

ResetItemTimeout(HttpContext, String)

Обновляет дату и время истечения срока действия элемента в хранилище данных сеанса.

SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean)

Обновляет данные об элементе сеанса в хранилище данных состояния сеанса значениями из текущего запроса, а также снимает блокировку данных.

SetItemExpireCallback(SessionStateItemExpireCallback)

Задает ссылку на делегата SessionStateItemExpireCallback для события Session_OnEnd, заданного в файле Global.asax.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел