Я хочу считать анонимных пользователей онлайн на веб-сайте Sharepoint 2007 (в ферме).
Классический способ сделать это в .NET:
protected void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["online"] = Convert.ToInt16(Application["online"]) + 1;
Application.UnLock();
}
protected void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
Application.Lock();
Application["online"] = Convert.ToInt16(Application["online"]) - 1;
Application.UnLock();
}
Вы не можете сделать это, если используете сессионное состояние Sql-сервера, потому что Session_End никогда не запускается, а только Session_Start.
Как вы знаете, файл web.config на веб-сайтах Sharepoint настроен на использование SQL-сервера для сеансов.
<sessionState mode="SQLServer" timeout="1" allowCustomSqlDatabase="true" partitionResolverType="Microsoft.Office.Server.Administration.SqlSessionStateResolver, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
Это потому, что вы можете обмениваться сессиями между различными серверами, поскольку они реализованы в базе данных SQL SERVER.
Меня это не волнует, потому что мы используем балансировщик нагрузки, поэтому пользователи сохраняют сессии благодаря этому.
Итак, мое первое решение - изменить SessionState на «Inproc». Сеанс пользователя будет сохранен на том же сервере благодаря балансировщику нагрузки.
Но, во-вторых, я не знаю, будет ли Application ["online"], свойство, которое будет сохранять пользователей в сети, использоваться совместно на разных серверах, или каждый сервер будет иметь разные значения, если я использую Inproc , Это может быть реальной проблемой перехода на сессионное состояние Sql Server.
В итоге:
1.- Мне нужно знать, является ли Приложение общим для серверов, даже если inProc используется в ферме Sharpoint.
2.-Последствия / проблемы / ошибки, вызванные переходом на Inproc.
3. - Нашли ли вы какое-либо другое решение для реализации подсчета анонимных пользователей, если у вас есть сеанс сервера SQL Server и вы используете Sharepoint 2007?
Я нашел это решение с помощью кеша:
http://www.codeproject.com/KB/aspnet/SessionEndStatePersister.aspx
Самый простой, самый лучший.