2009-02-13 4 views
0

J'ai rencontré un problème NullReference à l'aide d'événements WWF et externes. La machine d'état WWF fonctionne avec une instance de service qui déclenche des événements dans la machine d'état pour fournir des données et - bien sûr - pour changer l'état. Alors que l'opération "normale" fonctionne bien en utilisant des événements, j'ai un problème étrange.Windows Workflow Foundation NullReferenceException

Pour gérer les scénarios de dépassement de délai, je laisse l'initialiseur d'état utiliser un mécanisme de temporisation externe pour enregistrer un rappel dans le service menioned. Après l'heure indiquée, la fonction de rappel s'exécute et déclenche l'événement de délai d'attente dans la machine d'état. Les événements sont définis comme suit:

event EventHandler<ExternalDataEventArgs> DeviceSysmapBrdcstTimeoutEvent; 

et comme indiqué précédemment fonctionnent correctement s'ils ne sont pas appelés à partir du machanisme de temporisation. Les ExternalDataEventArgs sont créés à l'aide de règles valides. L'Excetion est levée accédant au délégué dans l'événement:

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) 

Quelqu'un a une idée? Merci.

Répondre

1

vous pouvez obtenir l'exception ci-dessus pour plusieurs raisons pour plus de détails, vous devez vérifier la propriété des exceptions intérieure

une raison possible me pourrait que le temps vous pouvez passer d'un état A à État B mais avant le changement d'état, vous devez vérifier que vous êtes réellement dans l'état A

POST INNER Exceptions detials pour plus de clarté

1

vous devriez vérifier l'intérieur excep tion pour plus de détails. Vérifiez si les classes de service d'événement sont marquées [Serializable] et définissez également la propriété WaitForIdle sur true dans les arguments d'événement.

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

Vérifiez si cela résout le problème.

Merci.

Questions connexes