Как несколько запросов ASP.NET от нескольких клиентов могут обмениваться информацией? - PullRequest
2 голосов
/ 09 декабря 2010

Представьте себе веб-сайт, где отдельные клиенты могут видеть присутствие друг друга - например, социальная сеть или чат.

Например:
Клиент1 подключается к моему сайту.
Внутренний код C # обновляет статическое поле, чтобы указать присутствие Client1.
Клиент2 подключается к моему веб-сайту.
Будет ли серверный код C # для второго запроса видеть информацию, хранящуюся в статическом поле из первого запроса? Что мне нужно сделать, чтобы гарантировать, что эти отдельные экземпляры моего приложения ASP делятся статическими данными?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Вы также можете использовать Приложение состояние или Кэш для обмена информацией между всеми вашими клиентами.

В приложении ASP.net приложение / кэш будетодин из распространенных способов обмена информацией между приложениями.

Однако сначала необходимо учесть следующее, чтобы убедиться, что оно соответствует вашим конкретным потребностям.

При использовании состояния приложения вы должны бытьзнать о различных соображениях:

  1. Ресурсы
  2. Волатильность
  3. Масштабируемость
  4. Параллелизм

См. раздел «ПрименениеИзложите соображения "в приведенной выше ссылке, чтобы узнать больше о том, что вы должны рассмотреть, прежде чем принять решение о своем выборе.

2 голосов
/ 09 декабря 2010

Это полностью зависит от того, какой информацией вы пытаетесь поделиться. Различные варианты могут быть:

  • База данных
  • Cache
  • Переменные приложения

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

Если вы хотите просто поделиться информацией о присутствии, вы можете посмотреть этот пост здесь. Как решить эту проблему сеанса в ASP.NET, VB.NET?

1 голос
/ 09 декабря 2010

Я хотел бы рассмотреть возможность использования службы Windows, через которую веб-приложение (а) может обмениваться данными через WCF.

Это даст вам большую степень гибкости;это позволяет вам выполнять дополнительную обработку данных вне процесса (например, агрегировать статистику присутствия, например, «50 человек в вашей расширенной сети находятся в сети»).Служба Windows также полностью освобождает вас от любых ограничений, которые существуют в механизмах состояния процесса.Это позволит вам свободно балансировать нагрузку и позволить нескольким приложениям потреблять свои данные.

Если данные являются одноразовыми, отключите службу без сохранения состояния.В противном случае сохраните некоторые / все / периодические данные в базе данных, что позволит вам восстановить их, даже если служба и / или веб-сайты выйдут из строя.

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

Редактировать: чтобы более подробно ответить на исходный вопрос, статические члены доступны для всех HTTP-запросов к домену приложения, которыеВаш сайт ASP.Net работает. Для чего бы то ни было, статические переменные также могут быть обозначены (через атрибуты) с различными уровнями доступа, например ThreadStaticAttribute.

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

1 голос
/ 09 декабря 2010

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

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