Служба рабочего процесса (WF4) в IIS7.5 Пул приложений / проблема смешивания рабочих процессов - PullRequest
2 голосов
/ 11 ноября 2010

Задача

Запросы WCF для моих 2 служб Workflow в разных пулах приложений не обрабатываются соответствующими рабочими процессами. Вместо этого оба рабочих процесса обрабатывают запросы WCF для обоих сервисов Workflow. Эта проблема возникает только в «Интегрированном» режиме управляемого конвейера, но не в «Классическом» режиме управляемого конвейера.

Настройка

  • 2 Службы Worflow (Workflow Foundation 4.0), работающие в IIS 7.5.
  • Каждая служба Workflow настроена как приложение в IIS и имеет собственный пул приложений со своими учетными данными Identity.
  • Пулы приложений работают в «Интегрированном» режиме управляемого конвейера.

Описание

Скажем, например, у меня есть Workflow Service A ( WFSA ) и B ( WFSB ), работающие в UserA и UserB соответственно. Они оба ожидают вызовов WCF через действия получения в рабочем процессе.

Когда я запускаю 2 пула приложений, я вижу запущенные 2 рабочих процесса w3wp.exe, один из которых UserA , а другой - UserB . Я ожидаю, что рабочий процесс w3wp.exe для UserA должен обрабатывать запросы WCF для WFSA , а рабочий процесс w3wp.exe для UserB должен обрабатывать запросы WCF для WFSB .

Однако, когда я начинаю отправлять сообщения WCF рабочим процессам, я вижу по файлам трассировки, что оба процесса w3wp.exe обрабатывают запросы для обоих сервисов Workflow.

Например, сообщения WCF для WFSA обрабатываются рабочими процессами w3wp.exe для UserA AND UserB . Поэтому, если я отправлю 10 сообщений WCF на WFSA , 4 будет обработан w3wp.exe для UserA , а 6 будет обработан w3wp.exe для UserB .

Когда я переключаю пул приложений в «классический» режим управляемого конвейера, сообщения WCF направляются соответствующим рабочим процессам, как и ожидалось.

Есть какая-то конфигурация, которую мне не хватает?

Любая помощь очень ценится.

Обновление

В проекте, над которым я работаю, WFSA , WFSB и другое приложение службы WCF ( WCFApp ) обмениваются данными друг с другом в следующей конфигурации :

WFSA <==> WFSB <==> WCFApp

Мы видим проблемы в следующем сценарии:

  • WFSA ==> WFSB ( UserA ): WFSA создает новый рабочий процесс на WFSB , который обрабатывается на w3wp.exe для UserA .
  • WFSB ( Пользователь A ) ==> WCFApp : WFSB вызывает WCFApp , что делает некоторые обработка.
  • WCFApp ==> WFSB ( Пользователь B !!!): После обработки WCFApp уведомляет WFSB что это сделано. Но сообщение WCF обрабатывается процессом w3wp.exe для UserB !!! Конечно, экземпляр рабочего процесса там не существует, поэтому он выдает следующее сообщение:

Запрошенный ресурс перемещен в одно из следующих мест: http://server/AppFolder/WFSB.xamlx/INotifyWhenDone

Я могу обойти это, установив:

<workflowIdle timeToUnload="00:00:00" />

Это означает, что рабочий процесс будет немедленно сохранен, когда он перейдет в режим ожидания, и сообщения, поступающие в неправильный рабочий процесс, могут быть обработаны, поскольку он может найти экземпляр рабочего процесса в базе данных постоянства. Однако это решение неприемлемо, поскольку постоянство ОЧЕНЬ МЕДЛЕННО.

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Существует несколько исправлений для AppFabric, одно из которых, похоже, связано с проблемами, с которыми вы столкнулись. Ищите здесь для ссылок.

0 голосов
/ 11 ноября 2010

У меня возникает ощущение, что обе службы регистрируют что-то вроде одного и того же «идентификатора» в IIS, хотя что это я не могу вам сказать (возможно, Correlation Id?)Следовательно, сообщения направляются обеим службам.У меня также возникает ощущение, что в интегрированном конвейере есть только один оптимизированный канал к сервисам, и несколько сервисов регистрируются в нем (что и приводит к моей более ранней точке).

...