Windows Workflow Foundation NullReferenceException
我在使用 WWF 和外部引发的事件时遇到了 NullReference 问题。 WWF 状态机与在状态机中引发事件的服务实例一起工作,以提供数据——当然——改变状态。虽然使用事件的”正常”操作可以正常工作,但我遇到了一个奇怪的问题。
为了处理超时场景,我让状态初始化程序使用外部超时机制在提到的服务中注册回调。在给定时间之后,回调函数运行并应在状态机中引发超时事件。事件定义如下:
1
|
event EventHandler<ExternalDataEventArgs> DeviceSysmapBrdcstTimeoutEvent;
|
并且如前所述,如果没有从超时机制中调用,则可以正常工作。 ExternalDataEventArgs 是使用有效的 Guid 创建的。在事件中访问委托时引发异常:
1
2 3 4 5 |
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) |
有人有想法吗?谢谢。
您应该检查内部异常以获取更多详细信息。检查您的事件服务类是否标记为 [Serializable] 并在事件 args 中将 WaitForIdle 属性设置为 true。
1
2 3 |
检查这是否能解决问题。
谢谢。
你可能会因为几个原因得到上述异常,你需要检查 Inner exceptions 属性的详细信息
一个可能的原因是我可能希望在超时时从状态 A 转换到状态 B,但在状态更改之前,您需要验证您实际上处于状态 A
为了清楚起见,发布内部异常详细信息
你可以看看这个链接是否有用吗?
http://www.mono-project.com/Gendarme.Rules.Concurrency#ProtectCallToEventDelegatesRule
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/269765.html