2010-06-17 2 views
0

У меня есть служба WF, которую я пытаюсь настроить для получения активности для «Подписки» и «Отказаться от подписки». Я использую This WF Durable Duplex Tutorial в качестве основы, потому что моя служба выполняет обратные вызовы для клиентов. В принципе, подумайте об этом как о чате.Почему переменная Workflow Service (4.0) имеет значение null в DoWhile Activity?

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

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

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

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

Оттуда он переходит в последовательность, начиная с буквы If. Он проверяет, соответствует ли unsubscribeAddressaddress уже подписанным. Если это так, то он устанавливает address в String.Empty и отправляет сообщение об успешном завершении клиенту.

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

CONCAT EDIT: Я установил точку останова на уровне DoWhile, и мой var имеет значение null, как только вызывается Unsubscribe(). Когда вызывается Subscribe(), часы показывают значение в var до конца. До I Unsubscribe() с клиентом. Должен ли я вместо этого использовать операцию While?

ответ

0

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

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

0

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

+0

Извините, Gnostus, это .Net Workflow Service, и я не могу создать класс и определить переменную как свойство. Если бы это был код, тогда было бы легче решать и бесконечно легче отлаживать при этом. – jlafay

1

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

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

Да, если вы видите мой ответ выше, я обнаружил проблему. Дизайнер пугает меня, потому что переключение между XAML и дизайнером деятельности сделало вещи очень завуалированными в коде. Я удалил действия обмена сообщениями и начал работу. Поскольку корреляция была настолько обратной, и ReplyToReceive были заменены, строка адреса была потеряна в битве. Кстати, большое спасибо за ваши замечательные сообщения в блоге о долговечных дуплексах и обратных вызовах в WF-сервисах! Они очень помогли мне. – jlafay

Смежные вопросы