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] とマークされているかどうかを確認し、イベント引数で WaitForIdle プロパティを true に設定します。

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

これで問題が解決するかどうかを確認してください。

ありがとう。

于 2009-03-14T05:00:52.447 に答える
0

内部例外プロパティを確認する必要がある詳細については、いくつかの理由で上記の例外が発生する可能性があります

考えられる理由の 1 つは、タイムアウト時に状態 A から状態 B に移行したいが、状態を変更する前に、実際に状態 A にいることを確認する必要があることです。

POST THE INNER 明確にするための例外の詳細

于 2009-02-17T16:55:04.383 に答える