Я думаю над приложением ASP.NET, которое использует ESENT для сохранения.
На данный момент это просто мой хобби-проект, поэтому требования очень гибкие.Однако мне бы хотелось, чтобы он работал в Windows 7, Windows 2008 и 2008 R2, с .NET 3.5 и выше, а также с настройками IIS по умолчанию.
В ESENT для большинства операций требуется открыть объект сеанса.Документация гласит: «Сеанс отслеживает, в каком потоке он использовался, и выдает ошибку, если используется в нескольких потоках с открытой транзакцией».В документации API упоминаются собственные потоки, а не управляемые потоки.
Я предполагаю, что операция открытого сеанса является относительно дорогой, поэтому я не хочу открывать / закрывать сеанс для каждого HTTP-запроса.
Вот, наконец, мои вопросы.
Как в asp.net я инициализирую / деинициализирую что-то ровно один раз в каждом нативном потоке, который выполняет мой код C #?
Будет ли этот код опубликованниже работают для меня?
Есть ли что-то плохое, чего я не знаю, в том, чтобы постоянно управлять потоком asp.net, привязанным к собственному потоку с помощью метода BeginThreadAffinity?Не пропадет ли моя сессия после того, как IIS будет загружен в течение месяца без единой перезагрузки?
Заранее спасибо!
class MySession: IDisposable
{
[ThreadStatic]
private static MySession s_session = null;
public static MySession instance
{
get
{
return s_session ?? ( s_session = new MySession() );
}
}
private MySession()
{
Thread.BeginThreadAffinity();
// Open a new session, store the handle in non-static data member.
}
void IDisposable.Dispose()
{
// Close the session.
Thread.EndThreadAffinity();
}
}