ASP .NET, контроль параллелизма с WCF - PullRequest
2 голосов
/ 30 марта 2011

Я бы хотел посоветоваться со всеми вами, основываясь на вашем опыте работы с архитектурой на основе SOA и способах управления параллелизмом с помощью WCF и nHibernate.

  1. ASP .NET (веб-приложение) - 1уровень (веб-сервер)
  2. WCF + nHibernate - 2-й уровень (сервер приложений)

сценарий 1

a.Пользователь1 открыл ордер и отредактировал его.б.Тем временем Пользователь2 открывает тот же Заказ и редактирует его.

Как мы запрещаем Пользователю2 выполнять эту операцию.Оба вызова WCF для «изменения порядка» извлекают запись, используя разные сеансы nHibernate, поскольку сервер приложений предназначен для работы без сохранения состояния.

Как настроить nHibernate / WCF для обработки сценариев такого типа?

Сценарий2

Если при вводе заказа требуется несколько страниц;со страницами, отображаемыми на основе бизнес-логики (вызовы WCF для определения следующей страницы), следует ли хранить данные заказа на веб-сервере (ASP .NET) на этих страницах и размещать их при каждом вызове WCF, заботясь о бизнес-логике заказа?Правильно ли мое мышление?

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

1 Ответ

3 голосов
/ 30 марта 2011

Что касается первого сценария, вы не хотите блокировать попытки пользователя отредактировать;ваша система никогда не масштабируется, если вы попытаетесь навязать пессимистический параллелизм.

Скорее, вы хотите использовать оптимистичный параллелизм;ваши модели будут иметь временную метку (обычно фактическое значение даты-времени или, что еще лучше, какое-то двоичное значение, гарантированно уникальное для конкретного контекста / таблицы).Большинство ORM (включая nHibernate, я уверен) поддерживают оптимистичный параллелизм;при создании обновления он будет обновлять запись только в том случае, если первичный ключ совпадает с и , отметка времени совпадает, если это не так, то вы знаете, что кто-то еще редактировал запись с последнего разаВы извлекли данные.

Для второго сценария вы можете рассмотреть Рабочий процесс Windows , который тесно интегрирован с WCF.Тем не менее, как правило, я бы имел отдельную таблицу , которая содержит информацию о неполном заказе вместе с ключом, который пользователь может использовать (возможно, идентификатор сеанса) для поиска данных.

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

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