Frage

Ok, so kann ich dies falsch nähern, aber im Wesentlichen einen WF-Dienst, dass Hosts aufzubauen, um einen Windows-Dienst in 4.0 mit neuen WF Diensten zu spielen Ich versuche. Im Moment habe ich aufgebaut Client (mit einem einfachen Aktivität XAML) und Service (WF-Dienst in einer Datei XAMLX implementiert) Projekte.

Ich habe für jeden ein einfaches „Hallo Welt“ versucht. Der Kunde hat in einem WorkflowApplication und ich zunächst Setup des Dienst als Standard-WF-Service-Projektvorlage gehostet. Beide scheinen in Ordnung, dort zu sein.

Da ich einen Dienst ohne IIS hosten möchten, natürlich mein nächster Versuch war mein Dienst in einem WorkflowServiceHost zu hosten. verwenden XamlServices.Load() können diese ich tun, und übergeben Sie das Objekt an die WorkflowServiceHost Konstruktor liefert zusammen mit einer URI für den Endpunkt. Ich war besorgt, weil, dass es kein Run() Mitglied Verfahren ist wie es in der WorkflowApplication Klasse. Ich nahm an, dass die Open() Methode, um das Service-Host-Objekt als Dienst öffnen würde und dass es eine Instanz des Workflows zu starten, aber es gibt keinen Hinweis darauf.

Zuerst habe ich Setup der Service-Workflow einfach in eine Textdatei zu schreiben, als es begann, aber es ist nichts passiert. Ich habe versucht, zu debuggen mit Haltepunkten, aber da es eine XAMLX Datei zur Laufzeit geladen, VS erlaubt mir nicht, die WF zu debuggen. Also habe ich versucht, das Client-Projekt ein wenig Veränderung eines WorkflowServiceHost anstelle eines WorkflowApplication zu verwenden. Ich benutzen den gleichen Workflow zu testen, den Hallo Welt Stil Workflow verwendet und dieses Mal gibt es keine Ausgabe auf der Konsole und die WorkflowApplication war erfolgreich mit dem zuvor.

Hier ist die Grundlagen dessen, was ich mit dem Kunden haben den Workflow-Dienst in der Konsole Projekt zu hosten. Wenn jemand will, die XAML für den Workflow sehen, lassen Sie mich wissen und ich werde diese Frage aktualisieren. Hier ist der Hosting-Code in 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();
War es hilfreich?

Lösung

Was ich herausgefunden habe, ist, dass, da Sie nicht direkt auf die WF-Instanz starten kann, die durch das WorkflowServiceHost Objekt, es ist ein bisschen wie ein Schmerz, um sie auszuführen und durch einen einfachen Methodenaufruf ziemlich unmöglich gewickelt ist, wie Sie mit einem WorkflowApplication erreichen können . Es gibt einen „Trick“, um die WF Feuer zu haben, aber braucht ein bisschen ein Hacking, dass ich an dieser Stelle Zeit nicht gegeben haben. MSDN hat eine obskure Referenz von dem, was Sie in diesem Szenario

scroll top