Question

Ok, je puis approcherons ce mal, mais essentiellement je suis en train de jouer avec de nouveaux services de WF à 4.0 pour construire un service Windows qui héberge un service WF. En ce moment j'ai construit client (contenant une activité simple XAML) et des projets de service (service de WF mis en œuvre dans un fichier XAMLX).

J'ai essayé simple pour chacun « mondes hello ». Le client a été hébergé dans un WorkflowApplication et je configuration d'abord le service comme modèle de projet de service WF par défaut. Les deux semblent être bien là.

Depuis que je veux héberger un service sans IIS, naturellement ma prochaine tentative était d'accueillir mon service dans un WorkflowServiceHost. Faire cela, je peux utiliser XamlServices.Load() et passer l'objet retourne au constructeur de WorkflowServiceHost avec un URI pour le point final. Je suis inquiet parce qu'il n'y a pas de méthode membre de Run() comme il y a dans la classe WorkflowApplication. Je suppose que la méthode Open() ouvrirait l'objet hôte de service en tant que service et qu'il commencerait une instance du flux de travail, mais il n'y a pas d'indication de celui-ci.

Dans un premier temps je configurer le service de workflow écrire simplement un fichier texte quand il a commencé, mais rien ne se passait. J'ai essayé de débogage avec des points d'arrêt, mais étant donné qu'il est de charger un fichier XAMLX lors de l'exécution, VS ne me permet pas de déboguer le WF. J'ai donc essayé de modifier le projet client un peu d'utiliser un WorkflowServiceHost au lieu d'un WorkflowApplication. J'ai utilisé le même flux de travail utilisé pour tester le flux de travail de style Bonjour tout le monde et cette fois il n'y avait pas de sortie de la console et la WorkflowApplication réussissais avec qui, auparavant.

Voici les bases de ce que je faisais avec le client pour héberger le service de workflow dans le projet de la console. Si quelqu'un veut voir le XAML pour le flux de travail laissez-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();
Était-ce utile?

La solution

Ce que j'ai découvert est que, puisque vous ne pouvez pas démarrer directement l'instance de WF qui est enveloppé par l'objet WorkflowServiceHost, est un peu d'une douleur à l'exécuter et à peu près impossible par un simple appel de méthode que vous pouvez accomplir avec un WorkflowApplication . Il y a un « truc » pour avoir le feu WF mais prend un peu de hacking que je ne l'ai pas donné le temps de à ce stade. MSDN a une référence obscure de ce que vous pouvez faire dans ce scénario

scroll top