[WF4.0 實戰] 事件驅動應用
看到題目或許非常多人都會疑問,為什麽要使用事件監聽呢?
眼下的認識:
1,使用事件監聽能夠將工作流的結點返回值返回到client
2,能夠實現等待與重新啟動,相當於之前的WaitActivity創建BookMark的方式
至於使用WorkflowInvoker或者WorkflowApplication這兩種方式臨時還沒能實現工作流的節點值返回到client。可是對於等待流是能夠實現的!
當然要註意的是。假設須要進行事件的監聽。則不能使用WorkflowInvoker或者WorkflowApplication來啟動流程,而是須要通過WorkflowServiceHost來啟動監聽(
詳細實現:
WF:
拖放一個Receive到PickBranch的Trigger裏面(我們設置了這個Receive的ServiceContractName。和OperationName。能夠隨便取名。沒有太多限制。這裏事實上是使用了WCF的技術。)
我們能夠選擇Receive這個Activity,然後在右鍵菜單中找到Create
SendReply,然後找到合適的位置粘貼就可以。能夠生成對應的SendReplyTo,與Receive自己主動關聯
那麽,我們究竟要發送什麽數據給用戶呢?能夠點擊Activity上面的Content這個地方
WCF
新建一個“控制臺應用程序”(Host),加入對應的引用
宿主程序(通過代碼的方式啟動工作流服務)即將工作流作為一種服務公布出去:
namespace Host { class Program { static void Main(string[] args) { var host = new WorkflowServiceHost( new DocumentReviewLib.DocumentReviewWorkflow(), new Uri("http://localhost:8080/DRS")); host.AddDefaultEndpoints(); host.Description.Behaviors.Add( new ServiceMetadataBehavior() { HttpGetEnabled = true }); host.AddServiceEndpoint( "IMetadataExchange", MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); host.Open(); Console.WriteLine("Server is ready."); Console.Read(); } } }
點擊F5就可以啟動服務,在瀏覽器中能夠查看服務
那麽將這部做完以後我們client是如何調用我們封裝的這麽一個工作流的服務呢
我們希望client調用這個工作流的服務呢是一個很松的耦合,那麽我們能夠用一個很easy的辦法,去生成呢對這個服務的一個代理,通過這個代理類來進行調用
生成他的代理類
依據上面頁面的提示,我們能夠產生一個服務代理類。
註意。要使用Visual Studio Command Prompt。而不是默認的cmd
查看生成的代理類:
當中生成的對應方法為:
public System.Nullable<int> CreateTicket() { CreateTicketRequest inValue = new CreateTicketRequest(); CreateTicketResponse retVal = ((IDocumentReview)(this)).CreateTicket(inValue); return retVal.@int; }
WindowsForms:
我們接下來要設計一個Windows Forms的client程序。來使用該服務,發起流程的操作
將剛才工具所生成的兩個文件加入到當前項目,而且將output.config改動為app.config
假設client為winform或為wpf那麽我們會將這個output改成app.config
怎樣client為webform,我們改名為web.config
client調用
相應的代碼:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btCreate_Click(object sender, EventArgs e) { var proxy = new DocumentReviewClient(); var result = proxy.CreateTicket(); lstTickets.Items.Add(result); } }
執行結果:
附上整個應用程序說明:
以上的演示樣例是通過WCF實現的事件驅動方式,使用這樣的方式有幾種優勢:
1:client調用這個工作流的服務是一個很松的耦合(代理)
2:能夠實現工作流結點往client返回值
3:也是啟動工作流的還有一種方式
總結:
對於學習來說,我們大家都是從不懂到理解更加深刻,或許到如今我們對工作流的理解還存在偏差,還有好多疑問,可是隨著學習的不斷深入。理解也在不斷深入,記得剛開始看關於工作流中的事件驅動時的不理解。但隨著不斷的學習,我們自己也在不斷解決自己的疑問,相信這就是學習的過程!
[WF4.0 實戰] 事件驅動應用