Você pode especificar um personalizado SessionStateStoreProviderBase implementação de um aplicativo ASP.NET, definindo o mode atributo da sessionState elemento de configuração para Custom e o customProvider de atributo para o nome do provedor personalizado, como como mostrado no exemplo deste tópico.You can specify a custom SessionStateStoreProviderBase implementation for an ASP.NET application by setting the mode attribute of the sessionState configuration element to Custom and the customProvider attribute to the name of the custom provider, as shown in the example for this topic.

Para evitar colisões de dados no armazenamento de sessão e comportamento inesperado de estado de sessão, o SessionStateModule e SessionStateStoreProviderBase classes incluem a funcionalidade de bloqueio que bloqueia com exclusividade o item de repositório de sessão para uma determinada sessão durante a execução de uma página ASP.NET.To avoid data collisions at the session store and unexpected session-state behavior, the SessionStateModule and SessionStateStoreProviderBase classes include lock functionality that exclusively locks the session store item for a particular session for the duration of the execution of an ASP.NET page.Observe que mesmo se o EnableSessionState atributo está marcado como ReadOnly, outras páginas ASP.NET no mesmo aplicativo podem ser capazes de gravar para o armazenamento de sessão, de forma que uma solicitação para a sessão somente leitura de dados do armazenamento ainda podem acabar aguardando bloqueadas dados a serem liberada.Note that even if the EnableSessionState attribute is marked as ReadOnly, other ASP.NET pages in the same application might be able to write to the session store, so a request for read-only session data from the store might still end up waiting for locked data to be freed.

Um bloqueio é definido em dados de armazenamento de sessão no início da solicitação, na chamada para o GetItemExclusive método.A lock is set on session-store data at the beginning of the request, in the call to the GetItemExclusive method.Quando a solicitação for concluída, o bloqueio será liberado durante a chamada para o SetAndReleaseItemExclusive método.When the request completes, the lock is released during the call to the SetAndReleaseItemExclusive method.

Se o SessionStateModule objeto encontrar dados de sessão bloqueado durante a chamada para o GetItemExclusive ou o GetItem método, ele solicitará novamente os dados da sessão em intervalos de meio segundo até que o bloqueio seja liberado ou a quantidade de tempo que o dados de sessão foi bloqueados excede o valor da ExecutionTimeout propriedade.If the SessionStateModule object encounters locked session data during the call to either the GetItemExclusive or the GetItem method, it will re-request the session data at half-second intervals until either the lock is released or the amount of time that the session data has been locked exceeds the value of the ExecutionTimeout property.Se o tempo limite de execução for excedido, o SessionStateModule objeto chamará o ReleaseItemExclusive método para liberar os dados do armazenamento de sessão e solicitar os dados de armazenamento de sessão no momento.If the execution time out is exceeded, the SessionStateModule object will call the ReleaseItemExclusive method to free the session-store data and request the session-store data at that time.

Porque o armazenamento de sessão bloqueados dados podem ter sido liberados por uma chamada para o ReleaseItemExclusive método em um thread separado antes de chamar o SetAndReleaseItemExclusive método para a resposta atual, é foi feita uma tentativa de definir e liberar os dados do armazenamento de estado de sessão que tem já foram liberados e modificados por outra sessão.Because locked session-store data might have been freed by a call to the ReleaseItemExclusive method on a separate thread before the call to the SetAndReleaseItemExclusive method for the current response, an attempt could be made to set and release session-state store data that has already been released and modified by another session.Para evitar essa situação, o GetItem e GetItemExclusive métodos retornam um identificador de bloqueio.To avoid this situation, the GetItem and GetItemExclusive methods return a lock identifier.Esse identificador de bloqueio deve ser incluído com cada solicitação para modificar os dados do armazenamento de sessão bloqueado.This lock identifier must be included with each request to modify locked session-store data.Armazenamento de sessão dados são modificados apenas se o identificador de bloqueio no armazenamento de dados corresponde ao identificador de bloqueio fornecido pelo SessionStateModule.Session-store data is modified only if the lock identifier in the data store matches the lock identifier supplied by the SessionStateModule.

Atualiza as informações do item de sessão no armazenamento de dados do estado de sessão com valores da solicitação atual e limpa o bloqueio nos dados.Updates the session-item information in the session-state data store with values from the current request, and clears the lock on the data.