Рабочий процесс 4 с ASPNET: параллелизм и проверка состояния - PullRequest
0 голосов
/ 15 марта 2011

Я пытаюсь смоделировать сценарий отправки / утверждения / завершения запроса.Я использую рабочий процесс потоковой диаграммы, размещенный как сервис в консольном приложении, использующем WorkflowServiceHost.Рабочий процесс имеет ссылку на службу WCF, размещенную в IIS, эта вторая служба взаимодействует с базой данных приложения.У меня есть клиентский интерфейс aspnet со ссылкой на службу размещенного сервиса рабочего процесса, и я вызываю его методы из прокси-клиента.

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

Сценарий состоит в том, что запрос на услугу сделан пользователем.Запрос должен быть одобрен один раз конкретным человеком (я использую выбор с задержкой в ​​одном филиале, чтобы напомнить человеку, если решение не приходит, другой филиал принимает решение).Для некоторых услуг запрос должен иметь второе одобрение, которое может быть сделано любым из группы утверждающих.После того, как одобрение закончено, запрос направляется к другому пулу людей для завершения.

У меня это работает, но 3 вопроса:

  1. На домашней странице aspnet у меня есть списокзапросы со ссылками на страницы для утверждения / завершения в зависимости от ситуации и вызова методов на прокси-сервере, после чего они перенаправляют обратно, но поскольку все это асинхронно, мне приходится вручную обновлять домашнюю страницу, чтобы увидеть измененный список.Застрял ли я заставлять страницу обновляться каждые x секунд, чтобы обойти это, или есть способ сделать ее синхронной / проверить состояние рабочего процесса / дождаться возвращения сообщения?Это не очень интерактивно, просто нажимать кнопку и не знать, было ли действие успешным или нет.
  2. Есть ли способ остановить кого-то, одобряющего запрос, сразу после того, как кто-то еще в пуле одобрил его?В данный момент ничего не происходит со вторым человеком, когда он нажимает кнопку (что хорошо).В базе данных персистентности рабочего процесса я вижу, что блокирующая закладка является следующим действием (предположительно установленным человеком, который первым туда попал), так что похоже, что второго приема просто не происходит.У меня есть код проверки параллелизма в службе данных WCF, но он никогда не срабатывает, потому что нет попытки обновить базу данных.Я хотел бы иметь возможность предупредить второго человека о том, что первым оказался другой пользователь.
  3. Мой список домашних страниц в веб-приложении создается с помощью запросов к базе данных приложения, но можно ли запросить рабочий процесс, чтобы найтистатус каждого элемента, передавая идентификатор элемента (я использую идентификатор в качестве дескриптора корреляции)?Это нормально, или люди обычно просто запрашивают базу данных приложения?

1 Ответ

0 голосов
/ 16 марта 2011
  1. Полагаю, вы могли бы создать вызов Ajax, который бы проверял, происходит ли какое-либо изменение состояния, и обновлял страницу только в этом случае.
  2. Если вы отправляете запрос WCF для операции, котораябольше не действителен, вы должны получить сообщение об ошибке, если только вы не используете односторонний обмен сообщениями, потому что нет сообщения для отправки ошибки обратно.Напоминаем, что из-за ошибки в WF4 сообщение может быть истекло через 60 секунд.Нет реального способа избежать этой проблемы, потому что вы проверяете состояние рабочего процесса как постоянное и позволяете пользователю выполнить действие, основанное на этом.Даже когда вы запрашиваете состояние, рабочий процесс может быть возобновлен, но еще не сохранен.
  3. Либо может работать, но я обычно запрашиваю хранилище экземпляров рабочего процесса, так как оно ближе всего к фактическому состоянию рабочего процесса.
...