Domanda

Ok, così che io possa avvicinarsi questo modo non corretto ma essenzialmente sto cercando di giocare con nuovi servizi WF a 4.0 per costruire fino a un servizio di Windows che ospita un servizio di WF. Al momento ho costruito cliente (che contiene una semplice attività XAML) e di servizi (servizio WF implementato in un file XAMLX) progetti.

ho cercato semplice "mondi hello" per ciascuno di essi. Il client è stato ospitato in un WorkflowApplication e inizialmente ho configurato il servizio come il modello di progetto di servizio predefinito WF. Entrambi sembrano essere bene lì.

Dal momento che voglio per ospitare un servizio senza IIS, naturalmente il mio prossimo tentativo è stato quello di ospitare il mio servizio in un WorkflowServiceHost. In questo modo posso usare XamlServices.Load() e passare l'oggetto torna al costruttore WorkflowServiceHost insieme a un URI per l'endpoint. Ero preoccupato perché non esiste un metodo membro Run() che ci sia nella classe WorkflowApplication. Ho supposto che il metodo Open() aprirebbe dell'oggetto host servizio come un servizio e che sarebbe avviare un'istanza del flusso di lavoro, ma non v'è alcuna indicazione di esso.

In un primo momento ho messa a punto il servizio di flusso di lavoro per scrivere semplicemente un file di testo quando è iniziato, ma non è successo niente. Ho cercato di debug con punti di interruzione, ma dal momento che si sta caricando un file XAMLX in fase di esecuzione, VS non mi permette di eseguire il debug del WF. Così ho provato alterare il progetto client un po 'di utilizzare una WorkflowServiceHost invece di un WorkflowApplication. Ho usato lo stesso flusso di lavoro utilizzato per testare il flusso di lavoro ciao stile mondo, e questa volta non c'era nessuna uscita per console e il WorkflowApplication avuto successo con quella in precedenza.

Ecco le basi di quello che ho fatto con il cliente per ospitare il servizio flusso di lavoro nel progetto di console. Se qualcuno vuole vedere il codice XAML per il flusso di lavoro me lo faccia sapere e io aggiornare questa domanda. Ecco il codice di hosting 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();
È stato utile?

Soluzione

Quello che ho scoperto è che, poiché non è possibile avviare direttamente l'istanza WF che è avvolto dall'oggetto WorkflowServiceHost, è un po 'di dolore per eseguirlo e praticamente impossibile con una semplice chiamata di metodo, come si può realizzare con un WorkflowApplication . C'è un "trucco" per avere il fuoco WF, ma prende un po 'di un hacker che non ho dato il tempo di in questo frangente. MSDN ha un riferimento oscura di cosa si può fare in questo scenario qui , in Hosting non-Service flussi di lavoro .

Questa è la soluzione che sono andato con: utilizzando sia il WorkflowServiceHost E il WorkflowApplication. Perchè lo chiedi? Bene, perché stavo cercando di fare un bel po 'di tutto in un unico pacchetto piccolo piccolo. Sto anche costruendo questo come un modello di servizio personalizzato per il mio lavoro ed è meglio che mi separano la logica di business (WorkflowApplication) da tutto dell'attuazione comunicazione (WorkflowServiceHost). I fuochi di servizio più che bene in questo modo perché ovviamente ora il mio comm sottostante. workflow inizia con ricevono attività e WorkflowSericeHosts cercare qualche tipo di messaggistica attività alla radice del flusso di lavoro associato per avviare un'istanza.

Ora io sono un camper felice. La mia logica di business fa quello che dovrebbe fare, come previsto e il servizio di flusso di lavoro è ideare bene. Cosa c'è di meglio è che ho un modello in cui posso cadere in modo dinamico in logica di business per l'installazione e l'elaborazione dei dati Deploy custom / scricchiolio servizi in modo dinamico. Ora basta per perfetti richiamate fino data di un "cruscotto" a distanza, che è quello che sto passando alla successiva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top