Почему моя переменная Workflow Service (4.0) обнуляется в DoWhile Activity? - PullRequest
0 голосов
/ 17 июня 2010

У меня есть служба WF, которую я пытаюсь настроить для действий получения "Подписаться" и "Отписаться". Я использую Этот учебник по WF Durable Duplex в качестве основы, потому что мой сервис выполняет обратные вызовы для клиентов. По сути, думайте об этом как о службе чата.

Я могу делать клиентские звонки на два действия получения просто отлично. Что происходит, так это то, что адрес обратного вызова клиента передается в Subscribe () службы. Адрес хранится как переменная в сервисе WF, и все выглядит так, как будто оно будет работать, как и ожидалось.

Когда клиент вызывает Unsubscribe (), мои часы, которые я установил на адрес var во время отладки, показывают его как null. Так что же дает?

Вот основные настройки моего макета сервиса WF ...

Все окутано действием DoWhile. Внутри этого действия Pick и две ветви Pick. Первая ветка предназначена для подписки на действия. Он имеет действие receive-sendreply, которое присваивает строку, переданную клиентом, адресу WF var. Вторая ветка обрабатывает отписку. Триггером является действие «Запрос», и снова передается адрес клиента.

Оттуда он входит в последовательность, начинающуюся с If. Он проверяет, равен ли unsubscribeAddress уже подписанный address. Если это так, тогда он устанавливает address в String.Empty и отправляет клиенту сообщение об успехе.

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

РЕДАКТИРОВАНИЕ CONCAT: Я установил точку останова на уровне DoWhile, и моя переменная равна нулю после вызова Unsubscribe(). Когда вызывается Subscribe(), часы показывают значение в переменной все время. Пока я Unsubscribe() с клиентом. Должен ли я использовать Пока активность вместо

Ответы [ 3 ]

1 голос
/ 17 июня 2010

Не видя рабочего процесса, я могу только сделать несколько предположений, но я бы искал следующие вещи:

  1. Является ли переменная областью видимости для последовательности или чего-то, что находится внутри действия DoWhile?Между прочим, нет смысла менять его на действие While, единственное отличие состоит в том, что условие проверяется в начале или в конце.
  2. Используется ли переменная где-то еще и очищена таким образом.Попробуйте переименовать его и посмотреть, что дает.
  3. Есть ли упорство в игре и тип не сохраняется> Я предполагаю, что это либо строка, либо Uri, и оба должны быть хорошими.
  4. Естьсуществует проблема с корреляцией и обрабатывается ли ваше сообщение об отмене подписки другим рабочим процессом?Убедитесь, что CanCreateInstance имеет значение false.
0 голосов
/ 17 июня 2010

Ничего себе, страшные вещи. Я должен был вручную отредактировать файл xamlx ранее, и ссылки, которые я отредактировал для SendReplyToReceive, забавно сохранились, когда я вернулся к конструктору действий. Это выглядело так, как будто у меня было два Unsubscribe(), и не только это, но и маркеры корреляции для каждой ветви пересекались между ветвями.

Я все готово. Чтобы решить эту проблему, я удалил все действия по обмену сообщениями, добавив новое действие ReceiveAndSendReply в блок действий ветви 1. Затем я перетащил действие получения в триггер для ветви 1 и настроил его, как и раньше. Я проделал то же самое для ветви 2, за исключением того, что разместил действие SendReplyToReceive под своим действием If, которое проверяет совпадающие адреса.

0 голосов
/ 17 июня 2010

попробуйте сделать класс закрытым {get; set;} и ​​посмотрим, возникнет ли проблема по-прежнему, это лучшее, что я могу сделать, не видя фактического исходного кода, поскольку из того, что вы описали, я не вижу никаких проблем.

...