Windows Workflow Foundation NullReferenceException - PullRequest
0 голосов
/ 13 февраля 2009

У меня проблема с NullReference при использовании WWF и внешних событий. Конечный автомат WWF работает вместе с экземпляром службы, вызывающим события в конечном автомате, для предоставления данных и, конечно же, для изменения состояния. В то время как «нормальная» операция работает нормально с использованием событий, у меня возникла странная проблема.

Для обработки сценариев тайм-аута я позволил инициализатору состояния использовать внешний механизм тайм-аута для регистрации обратного вызова в упомянутой службе. По истечении заданного времени функция обратного вызова запускается и вызывает событие тайм-аута в автомате. События определены так:

event EventHandler<ExternalDataEventArgs> DeviceSysmapBrdcstTimeoutEvent;

и, как уже упоминалось, работает правильно, если не вызывается из механизма тайм-аута. ExternalDataEventArgs создаются с использованием допустимых направляющих. Возникает исключение при доступе к делегату в рамках события:

System.Workflow.Activities.EventDeliveryFailedException was unhandled by user code
    Message="Event \"DeviceSysmapBrdcstTimeoutEvent\" on interface type \"...\" for instance id \"efa3da3d-8546-4fcf-bc56-bbec04df6d69\" cannot be delivered."
Source="System.Workflow.Activities"
    StackTrace:
        at System.Workflow.Activities.WorkflowMessageEventHandler.EventHandler(Object sender, ExternalDataEventArgs eventArgs)

Есть идеи? Благодарю.

Ответы [ 3 ]

1 голос
/ 17 февраля 2009

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

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

ПОСТ ВНУТРЕННЯЯ Исключения для ясности

1 голос
/ 14 марта 2009

Вы должны проверить внутреннее исключение для более подробной информации. Проверьте, отмечены ли ваши классы обслуживания событий [Serializable], а также установите для свойства WaitForIdle значение true в аргументах событий.

CustomEventDataArgs eventArgs = new CustomEventDataArgs();
//
eventArgs.WaitForIdle = true;

Проверьте, решает ли это проблему.

Спасибо.

1 голос
/ 14 февраля 2009

Можете ли вы проверить, полезна ли эта ссылка?

http://www.mono -project.com / Gendarme.Rules.Concurrency # ProtectCallToEventDelegatesRule

...