Один сервер из трех проигравших сеансов с использованием State Server в веб-ферме - PullRequest
0 голосов
/ 05 марта 2012

Короче говоря, у меня есть три сервера в веб-ферме, один из которых настроен как State Server. Два сервера (включая State Server) правильно делятся состоянием сеанса, но другой сервер все еще держит свой сеанс.

Вот что я сделал:

Я изменил файл web.config.comments на всех трех серверах, чтобы они имели одинаковую запись machineKey.

На сервере состояний я изменил запись реестра AllowRemoteConnections на 1. Затем я настроил автоматический запуск службы состояний ASP.Net и включил ее.

Веб-сайт настроен на всех трех серверах, и корневой сайт использует один и тот же идентификатор в IIS. Каждая конфигурация идентична. Сам сайт находится в общей сетевой папке, поэтому один и тот же файл web.config используется на всех трех серверах. Я изменил запись sessionState в файле web.config, чтобы он указывал на Web3.

Таким образом, Web2 и Web3 могут устанавливать / изменять / уничтожать один и тот же сеанс, но Web1 все еще работает со своим собственным.

Я в недоумении после нескольких часов поиска в Google, поэтому любая помощь очень ценится.

Это приложение настроено несколько подкаталогов в корневой сайт. Есть ли отдельный AppID на этом уровне? Если так, как я могу найти это?

Спасибо, Аарон

Ответы [ 3 ]

2 голосов
/ 11 марта 2012

http://support.microsoft.com/kb/325056

Чтобы поддерживать состояние сеанса на разных веб-серверах в веб-ферме, путь приложения веб-сайта (например, \ LM \ W3SVC \ 2) в метабазе Microsoft Internet Information Services (IIS) должен быть одинаковым для всех веб-серверов в веб-ферме. Случай также должен быть таким же, потому что путь к приложению чувствителен к регистру.

На одном веб-сервере идентификатор экземпляра веб-сайта, на котором размещено приложение ASP.NET, может быть 2 (где путь к приложению \ LM \ W3SVC \ 2). На другом веб-сервере идентификатор экземпляра веб-сайта может быть равен 3 (где путь к приложению - \ LM \ W3SVC \ 3). Поэтому пути приложений между веб-серверами в веб-ферме различны. Для получения дополнительных сведений о том, как проверить путь к приложению на веб-сайте, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

240225 Описание Adsutil и MetaEdit, используемых для модификации метабазы ​​

0 голосов
/ 06 августа 2013

ответ Мэтьюка на самом деле оказался почти правильным. Через год я вернулся к этому и нашел ответ. Хотя, возможно, и правильно, я чувствовал, что если бы ответ выше был более конкретным, я бы решил это!

Я искал в веб-приложении файл MetaBase.xml (C: \ WINDOWS \ system32 \ inetsrv). После небольшой разницы я заметил небольшую разницу в следующей строке:

<IIsWebVirtualDir   Location ="/LM/W3SVC/103071637/root"
    AccessFlags="AccessRead | AccessScript"
    AppFriendlyName="Default Application"
    AppIsolated="2"
    AppRoot="/LM/W3SVC/103071637/Root"
...

В частности, AppRoot (а не Location) на Сервере 1 имел «Корень» в соответствующем регистре, тогда как на серверах 2 и 3 «ROOT» были прописными. Я обновил сервер 1, чтобы он соответствовал и перезапустил IIS, и он работает без проблем.

т.

AppRoot="/LM/W3SVC/103071637/Root"
AppRoot="/LM/W3SVC/103071637/ROOT"
0 голосов
/ 13 марта 2012

Это не совсем ответ на ваш вопрос, но по моему опыту служба состояний сеансов ASP.NET - это не то, что вы должны масштабировать до нескольких серверов.Он не очень хорошо работает (особенно под нагрузкой) и его сложно настроить.Я обнаружил, что распределенный кеш, такой как memcached, намного проще и быстрее для этой цели.

Посмотрите на этот проект .

...