2010-06-14 8 views
0

J'ai rencontré un problème avec mon magasin d'instance SQL associé à un WorkflowApplication qui est en cours d'exécution. Lorsque je quitte mon application, j'appelle un Unload() sur l'application WF pour le maintenir. Je n'y ai pas pensé pendant la conception, mais cela a du sens, c'est la persistance d'un argument qui a été transmis au constructeur WorkflowApplication lors de l'instanciation. Lorsque l'application est en cours d'exécution, tout fonctionne dans le flux de travail comme prévu.Les états de persistance explicite dans Workflow 4.0 plutôt que tout

Lorsque j'appelle Unload(), j'obtiens une exception non gérée qui indique que l'argument n'est pas sérialisable et nécessite [DataContractAttribute].

Ce qui est passé dans le flux de travail est l'objet de mon enregistreur personnalisé d'applications que j'ai écrit pour que le WF puisse se connecter au disque d'une manière uniforme que je préfère. Comment puis-je empêcher l'application de flux de travail de conserver ce seul argument et de tout conserver?

Je suis sûr que quelque chose peut être fait avec des extensions, mais j'ai du mal à trouver des informations sur eux ou à trouver des exemples de persistance pour mon scénario.

Répondre

1

Vous pouvez décorer la variable pour qu'elle ne soit pas sérialisée, avec un attribut [NonSerialized].

Cela devrait faire l'affaire, cela a fonctionné pour moi dans une application WF3.5. Voir http://msdn.microsoft.com/en-us/library/ms973893.aspx, en-tête "Sérialisation sélective"

+0

Ok, j'appliquais des attributs incorrectement. Dans ma classe Logger, je l'ai décorée avec [Serializable] (même si je n'aime pas cette implémentation car elle n'est pas censée être sérialisée en premier lieu) et ensuite marqué l'objet Logger instancié avec [NonSerialized]. Maintenant, la persistance ignore l'objet du consignateur. Merci Joon! – jlafay