0

我在使用 WWF 和外部引发的事件时遇到了 NullReference 问题。WWF 状态机与在状态机中引发事件的服务实例一起工作,以提供数据——当然——改变状态。虽然使用事件“正常”操作可以正常工作,但我遇到了一个奇怪的问题。

为了处理超时场景,我让状态初始化器使用外部超时机制在提到的服务中注册回调。在给定时间之后,回调函数运行并应在状态机中引发超时事件。事件定义如下:

event EventHandler<ExternalDataEventArgs> DeviceSysmapBrdcstTimeoutEvent;

如前所述,如果没有从超时机制中调用,则可以正常工作。ExternalDataEventArgs 是使用有效的 Guid 创建的。引发 Excetion 访问事件中的委托:

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)

任何人的想法?谢谢。

4

3 回答 3

1

您应该检查内部异常以获取更多详细信息。检查您的事件服务类是否标记为 [Serializable],并在事件 args 中将 WaitForIdle 属性设置为 true。

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

检查这是否解决了问题。

谢谢。

于 2009-03-14T05:00:52.447 回答
0

您可能会因为多种原因而获得上述异常,您需要检查 Inner exceptions 属性的详细信息

一个可能的原因可能是,您可能希望在超时时从状态 A 转换到状态 B,但在状态更改之前,您需要验证您实际上处于状态 A

为了清楚起见,发布内部异常详细信息

于 2009-02-17T16:55:04.383 回答
0

您可以检查此链接是否有帮助?

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

于 2009-02-14T09:07:34.310 回答