Ok, donc je vais peut-être aborder cette question de manière incorrecte, mais j'essaie essentiellement de jouer avec les nouveaux services WF de la version 4.0 pour créer un service Windows qui héberge un service WF. Pour le moment, j'ai construit un projet (contenant un simple XAML d'activité) et un service (un service WF implémenté dans un fichier XAMLX).Héberger des workflows avec WorkflowServiceHost
J'ai essayé des "mondes de salut" simples pour chacun. Le client a été hébergé dans un WorkflowApplication
et j'ai initialement configuré le service en tant que modèle de projet de service WF par défaut. Les deux semblent être bien là.
Puisque je veux héberger un service sans IIS, naturellement ma prochaine tentative a été d'héberger mon service dans un WorkflowServiceHost
. En faisant cela, je peux utiliser XamlServices.Load()
et passer l'objet renvoyé au constructeur WorkflowServiceHost
avec un URI pour le point de terminaison. J'étais inquiet parce qu'il n'y a pas de méthode de membre Run()
comme il y a dans la classe WorkflowApplication
. J'ai supposé que la méthode Open()
ouvrirait l'objet hôte de service en tant que service et qu'il démarrerait une instance du flux de travail mais il n'y a aucune indication de celui-ci.
Au début, j'ai configuré le workflow de service pour écrire simplement dans un fichier texte quand il a commencé mais rien ne s'est passé. J'ai essayé de déboguer avec des points d'arrêt mais comme il charge un fichier XAMLX à l'exécution, VS ne me permet pas de déboguer le WF. J'ai donc essayé de modifier un peu le projet client pour utiliser un WorkflowServiceHost
au lieu d'un WorkflowApplication
. J'ai utilisé le même flux de travail utilisé pour tester le flux de travail hello world style et cette fois il n'y avait pas de sortie à la console et le WorkflowApplication
a réussi avec cela précédemment.
Voici les principes de base de ce que j'ai fait avec le client pour héberger le service de workflow dans le projet console. Si quelqu'un veut voir le XAML pour le flux de travail, faites-le moi savoir et je mettrai à jour cette question. Voici le code d'hébergement dans Main()
.
const String clientAddress = "http://localhost:9998/Client";
WorkflowServiceHost wfHost = new WorkflowServiceHost(new ClientWf(), new Uri(clientAddress));
wfHost.Open();
while(Console.ReadKey().KeyChar.ToString().ToUpper() != "X") { }
wfHost.Close();