# Dotnet > Gnral Dotnet > Windows Workflow Foundation >  [WF] Assembly Resolver pour les workflow

## Jrme Lambert

Salut  tous,

J'ai quelques soucis avec les workflows combin au *versioning d'assembly* et  la *persistance*.
Pour aller droit au but : Comment peut-on maintenir des workflows dont l'assembly d'origine a chang ?

Imaginons que j'ai dans mon assembly *Core* un modle de workflow de type State Machine. Mon projet client a un WorkflowRuntime afin de lancer des instances de mon Workflow provenant de l'assembly Core. J'ai ajout le service de persistance afin que mes workflows soient sauvegards dans une base de donnes.

Je lance donc l'application avec mon assembly en version 1.1, je cre une instance de workflow et j'arrte l'application pour que le workflow soit srialis en base de donnes. Ensuite, je change le numro de version de mon assembly Core (a fonctionne aussi si je change le schma de mon workflow) et je relance mon application avec la nouvelle version de l'assembly Core. Et l BOUM, impossible de rcuprer mon workflow vu que l'assembly n'est plus la mme, logique.

Alors sur MSDN, je trouve la rponse pour grer ce problme : http://msdn2.microsoft.com/en-us/lib...75(vs.85).aspx




> If you want to use the V1 version of the workflow for the V1 persisted instances, you can use an assembly resolver to help you handle this situation.


Ok, je veux bien crer un assembly resolver... Donc j'imagine que c'est une classe qui pourra nous donner un objet Assembly. Exemple, je dis :
Je veux mon assembly Core en version 1.1Maintenant, je veux mon assembly Core en version 1.2Est-ce que je me trompe ?

Ensuite, j'ai mon objet Assembly, mais comment est-ce que je peux relier cet objet  la rcupration d'une instance d'un workflow qui se trouve en base de donnes ?

Comme vous voyez, il me manque quelques briques que je n'arrive pas  trouver sur google  ::):

----------


## Bluedeep

Et en effectuant une persistance binaire de ton wf, plutt que d'utiliser la persistance de SqlWorkflowPersistanceService, a donne quoi ?

J'ai un problme un peu similaire, mais je l'ai rsolu "bourrin" :

- une assembly ne contient qu'un workflow.

- tout lancement d'un workflow par un autre passe par mon "WorkflowNodesManager" qui , en gros, interroge la charge des diffrents noeuds disponibles et l'envoie sur celui a priori le moins charg. (j'ai donc une activity d'enchainement spcifique).

- si une modification est faite a un workflow elle n'est dploye que quand la dernire instance de ce type a fini son job.

----------


## Jrme Lambert

> Et en effectuant une persistance binaire de ton wf, plutt que d'utiliser la persistance de SqlWorkflowPersistanceService, a donne quoi ?


Tu parles de faire persister mes workflow sur fichier ? Tu penses que a pourrait prouver quoi si je faisais a ?




> - une assembly ne contient qu'un workflow.


Pas bte.




> - si une modification est faite a un workflow elle n'est dploye que quand la dernire instance de ce type a fini son job.


Cette solution n'est pas envisageable pour ma part car le projet contiendra des workflows qui pourront vivre pendant des semaines.


Ce qui me pose vraiment problme, c'est la solution que propose Microsoft. Je ne vois pas comment relier tout ce que j'ai.

Dans me base de donnes, deux workflows :
WorkflowType1 avec ID1 et cr avec l'assembly Core 1.1WorkflowType1 avec ID2 et cr avec l'assembly Core 1.2Du ct de mon application courante (au niveau du client), j'ai un workflow runtime qui permet de rcuprer un workflow en base de donnes. Mais comment faire pour dsrialiser le workflow :
ID1, en prenant en compte l'assembly Core 1.1ID2, en prenant en compte l'assembly Core 1.2Je ne sais ni quoi utiliser (fichier de config avec AssemblyBinding ou la classe Assembly ou encore la classe AppDomain avec l'utilisation d'un proxy apparement), ni comment utiliser chaque proposition.

----------

