2010-05-18 8 views
1

Nous exécutons plusieurs applications ASP.NET (une par client) basées sur notre infrastructure personnalisée (qui étend simplement ASP.NET). Chaque application Web utilise sa propre base de données (Initial Catalog dans la chaîne de connexion). Maintenant, nous aimerions ajouter la capacité de workflow aux applications (respectivement à notre framework). Les flux de travail particuliers seront les mêmes pour toutes les applications, seuls certains paramètres initiaux de chaque flux de travail peuvent varier, par ex. dans une application, l'e-mail sera envoyé à l'utilisateur X, mais dans une autre application à l'utilisateur Y.Windows Workflow Foundation: plusieurs applications

La question est de savoir si nous pouvons installer un moteur de workflow (avec une base de données pour la persistance) et partager cela pour tous workflows dans toutes les applications Web.

Si tel est le cas, comment le moteur de flux de travail sait-il que le flux de travaux particulier appartient à quelle application Web? Devrions-nous stocker un identifiant d'application quelque part dans le workflow?

Merci pour vos suggestions!

Répondre

1

Si tous les flux de travail sont identiques, vous pouvez utiliser un seul WorkflowServiceHost pour chaque client et fournir les informations supplémentaires comme l'adresse e-mail en tant que paramètre de démarrage. Cependant, si vous pensez que vous allez modifier les flux de travail pour différents clients, je créerais un hôte différent pour chaque client spécifique. Bien sûr, vous pouvez toujours ajouter cela plus tard.

-1

Vous pouvez utiliser une seule base de données de persistance si vos flux de travail peuvent être réutilisés dans plusieurs applications.

Pour activer une propriété personnalisée dans votre flux de production ... dans l'AppId, vous devez disposer d'une interface de communication locale marquée ExternalDataExchangeAttribute.

Définissez votre propriété personnalisée ... AppId

[Serializable()] 
public class MyWorkflowEventArgs : ExternalDataEventArgs 
{ 

    private Guid _AppId; 

...

Ensuite, lorsque vous démarrez chaque flux de travail, vous pouvez passer votre propriété personnalisée via un dictionnaire ...

 System.Collections.Generic.Dictionary<String, Object> parameters = new System.Collections.Generic.Dictionary<String, Object>(); 

     Guid appId; 

     StartWorkflowRuntime(); 

     //Define the parameters for the workflow 
     parameters.Add("appId", appId); 

     // create the workflow instance 
     WorkflowInstance workflowInstance; 
     ManualWorkflowSchedulerService manualWorkflowSchedulerService; 
     workflowInstance = 
      (HttpContext.Current.Application[WorkflowRuntimeCacheKey] as WorkflowRuntime) 
       .CreateWorkflow(workflowclass, parameters);  

     // start the new workflowinstance 
     workflowInstance.Start(); 

Vous pouvez ensuite suivre dans votre flux de travail quelle application l'a instancié ...

+2

Ceci est un matériau WF3 et la question est marquée WF4. – Maurice