Необходимо сохранить блок данных в ASP.NET между обновлениями страниц в веб-ферме без использования inprpc или сервера состояний - PullRequest
1 голос
/ 12 августа 2009

У меня есть приложение asp.net, работающее в ферме серверов. Итак, сессии In-proc отсутствуют. Там нет государственного сервера. Есть база данных сервера sql (не может использоваться для сервера состояний). Там нет принудительного обслуживания тех же веб-серверов, поэтому нет гарантии, какой веб-сервер будет обслуживать следующую страницу.

Мне нужно сохранить блок данных (состояние большого объекта) между страницами. Я не хочу использовать viewstate, потому что данные могут быть большими и не хотят, чтобы они передавались по проводам. Я мог бы использовать базу данных для сохранения данных и использовать идентификатор записи по проводам в состоянии просмотра и получать данные для следующей страницы.

Есть ли лучшие решения?

Ответы [ 3 ]

4 голосов
/ 12 августа 2009

Я мог бы использовать базу данных для сохранения данные и использовать идентификатор записи через провод в смотровое состояние и получить данные для следующей страницы.

Вы исключили все остальные варианты.

1 голос
/ 12 августа 2009

Ну, я думаю, вы уже исключили большинство вариантов. И при условии, что вы не можете установить другие службы, на ум приходят две другие возможности:

  1. Используйте доступный для записи общий доступ к файлам для хранения данных.
  2. Разрешить отдельным веб-серверам общаться друг с другом. Например, сделайте IP-адрес компьютера или имя частью сгенерированного уникального идентификатора; таким образом, если вы получаете доступ к другому серверу при обратной передаче, этот сервер может вызвать исходный сервер для получения своих данных. Имейте в виду: если один сервер выходит из строя (или процесс ASP.NET перезагружается), все его данные теряются. * Я надеюсь, что это случается не так часто, независимо от этой темы.

Как и в версии SQL Server, не забудьте как-то очистить ваши данные; Вариант 1 очень похож на SQL Server в этом отношении, но в случае SQL Server это может быть просто централизованная очистка, в случае общего файлового ресурса возникает вопрос: какой сервер является центром?

*) Конечно, вы можете попытаться создать вторичный процесс в ASP.NET. Здесь возникает проблема: что, если у этого процесса есть проблемы? По умолчанию это не управляемо для ваших системных администраторов, если только вы не сделаете это управляемым.

0 голосов
/ 12 августа 2009

Я не уверен, правильно ли я прочитал, но нельзя ли использовать базу данных для хранения сеанса asp.net?

<sessionState
      mode="SQLServer"
      sqlConnectionString="somedb"
      cookieless="AutoDetect"
      timeout="20"
    />

Вы также можете использовать какое-то решение распределенного кэширования, например memcached (http://www.danga.com/memcached/), которое может сохранять данные между постбеками.

...