Come parlano il workflow e l'applicazione host?
Il sistema di comunicazione che c'è tra ogni istanza del workflow e l'applicazione che funge da host è basato sull'utilizzo di servizi di comunicazioni locali, che vengono inseriti nel runtime di WF prima che questo sia fatto partire.
Questi servizi di data exchange funzionano attraverso la definizione di specifiche interfacce che definiscono l'insieme di eventi che l'applicazione host può scatenare e che il workflow ascolta. Tali interfacce devono essere marcate tramite l'attributo ExternalDataExchange.
Per permettere quindi tale comunicazione, abbiamo bisogno di sviluppare un interfaccia che definisca gli eventi di inserimento, modifica, rimozione e completamento dell'ordine, una classe che implementi tale interfaccia e una classe che definisca gli argomenti da passare ad ogni evento, in modo tale da creare un livello di astrazione in grado di far dialogare l'host con il workflow.
namespace ShoppingCartWorkflow.Events
{
[ExternalDataExchange]
public interface IShoppingCartService
{
event EventHandler ItemInserted;
event EventHandler ItemModified;
event EventHandler ItemRemoved;
event EventHandler ItemPurchased;
}
public class ShoppingCartService : IShoppingCartService
{
public event EventHandler ItemInserted;
public event EventHandler ItemModified;
public event EventHandler ItemRemoved;
public event EventHandler ItemPurchased;
public void InsertItem(Guid id, ShoppingCartItem item)
{
if (ItemInserted != null)
ItemInserted(null, new ItemStateChangedEventArgs(id, item));
}
public void ModifyItem(Guid id, ShoppingCartItem item)
{
if (ItemModified != null)
ItemModified(null, new ItemStateChangedEventArgs(id, item));
}
public void RemoveItem(Guid id, ShoppingCartItem item)
{
if (ItemRemoved != null)
ItemRemoved(null, new ItemStateChangedEventArgs(id, item));
}
public void PurchaseItem(Guid id, ShoppingCartItem item)
{
if (ItemPurchased != null)
ItemPurchased(null, new ItemStateChangedEventArgs(id, item));
}
}
[Serializable]
public class ItemStateChangedEventArgs : ExternalDataEventArgs
{
private ShoppingCartItem item;
public ItemStateChangedEventArgs(Guid instanceID, ShoppingCartItem item)
: base(instanceID)
{
this.item = item;
WaitForIdle = true;
}
public ShoppingCartItem Item
{
get { return item; }
set { item = value; }
}
}
} E' importante notare che la classe dedita a definire gli argomenti dei nostri eventi personalizzati, deve essere marcata con l'attributo Serializable in quanto questi sono oggetti che verranno poi passati da un livello all'altro del sistema di comunicazione, e proprio in questo passaggio vengono serializzati dal runtime. Questa classe, inoltre, si prende carico di passare le informazioni sul prodotto scelto prendendo come parametro un oggetto di tipo ShoppingCartItem, da noi definito, per rappresentare un singolo prodotto del nostro carrello della spesa.
Senza la specifica di questa interfaccia di servizio, sarebbe impossibile far dialogare l'applicazione host con il workflow e scatenare tutti gli eventi utili a far saltare di stato il flusso di operazioni corrente.
Una volta definita questa interfaccia, possiamo continuare lo sviluppo del nostro workflow andando ad inserire nelle attività di tipo HandleExternalEventActivity, il tipo di interfaccia che gli permette di dialogare con il servizio di comunicazione (proprietà InterfaceType) e il tipo di evento cui dovranno rispondere (proprietà EventName).

Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Introduzione a .NET Micro Framework
- Gestire transazioni miste con NTFS in Windows Server 2008
- Windows Presentation Foundation 3.5: 3D interattivo e le altre novità del framework
- Le novità di Communication e Workflow Foundation e la loro cooperazione nel .NET Framework 3.5
- .NET Framework 3.5 e Visual Studio 2008: cosa c'è di nuovo
- Gestione delle eccezioni in Windows Communication Foundation
- Sviluppare workflow sequenziali con WF
- WPF: dal DataBinding ai Template - Terza parte
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




Difficoltà

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!