Sharepoint 2007: как подсчитывать анонимных пользователей, происходит ли что-то, если я изменяю сессионное состояние на inproc? - PullRequest
0 голосов
/ 10 ноября 2010

Я хочу считать анонимных пользователей онлайн на веб-сайте 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

Самый простой, самый лучший.

1 Ответ

0 голосов
/ 10 ноября 2010
  1. Состояние приложения является локальным для сервера, независимо от того, как обрабатывается состояние сеанса.

  2. Если вы используете Inproc, вы должны убедиться, что балансировщик нагрузки отслеживает пользователей, а всегда отправляет отдельного пользователя на тот же сервер, или сеанс будет потерян.

  3. Вы можете вести локальный подсчет пользователей на сервер и периодически обновлять запись в таблице в базе данных с подсчетом с каждого сервера. Затем вы можете получить общее количество пользователей, суммируя количество всех строк в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...