WPFWCFWF打造HelloWorld程序
英文版:http://www.codeproject.com/KB/WF/wcf-wpf-wf-hello-world.aspx
分析篇:
Hello World程序作為所有編程語言的起始階段,Hello World占據著無法改變的地位。本例子很簡單,用了WPF、WCF、WF三種還算比較新的技術。這個例子有三個項目:
1、WPFProject:WPF應用程序
2、WCFProject:WCF服務
3、WFProject:WF流程定義
執行順序是WPFProject程序去啟動WFProject項目的工作流,WFProject項目去調用WCFProject的WCF服務。接著WCFProject服務將'Hello World'這行編程界最經典的話返回給WFProject,WFProject由將將'Hello World'返回給WPFProject的UI。執行順序如下圖:
實現篇:
新建一個WpfApplication、一個ConsoleApplication、一個workflow的ActivityLibrary,共三個項目,命名分別為:WPFProject、WCFProject、WFProject,解決方案如下圖:
我們就在這些由VS模板生成的代碼實現這個Hello world程序,我們盡量地利用這些生成好的代碼。
最不熟悉WCF:
引用System.ServiceModel.dll
添加接口IService1:
1 [ServiceContract]
2 public interface IService1
3 {
4 [OperationContract]
5 string GetData();
6 }
添加類Service1:
1 public class Service1 : IService1
2 {
3 public string GetData()
4 {
5 return string.Format("Hello World");
6 }
7 }
App.config配置:
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <system.serviceModel>
4 <services>
5 <service name="WCFProject.Service1" behaviorConfiguration="metadata">
6 <host>
7 <baseAddresses>
8 <add baseAddress="http://localhost:8001/Service1"/>
9 </baseAddresses>
10 </host>
11 <!--The BasicHttpBinding is used because the Workflow uses a generated ASP.Net proxy to communicate with this service-->
12 <endpoint binding="basicHttpBinding" contract="WCFProject.IService1"/>
13 </service>
14 </services>
15 <behaviors>
16 <serviceBehaviors>
17 <behavior name="metadata">
18 <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
19 <serviceMetadata httpGetEnabled="true"/>
20 <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
21 <serviceDebug includeExceptionDetailInFaults="false"/>
22 </behavior>
23 </serviceBehaviors>
24 </behaviors>
25 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
26 </system.serviceModel>
27 </configuration>
在Program.cs添加啟動WCF服務代碼:
1 using (ServiceHost host = new ServiceHost(typeof(Service1)))
2 {
3 host.Open();
4 Console.WriteLine("The service is ready.");
5 Console.WriteLine("Press <ENTER> to terminate service.");
6
7 Console.ReadLine();
8 }
以上實現了一個簡單的WCF服務,這樣WCFProject就完成了。
最熟悉的WF:
在Activity1上托一個Sequence,再在Sequence托一個Send活動調用上面定義好的WCF服務。
添加一個存儲返回值的returnValue輸出參數。
Send活動需要知道WCF服務的ABC。故做如下設置。
1、OperateName:GetData(與上面WCF方法名字一致)
2、EndPoint設置為EndPoint
3、Bingding設置為basichttpBingding。
4、EndPointAddress設置為New Uri("http://localhost:8001/Service1"),與在WCFProject的app.config的地址相同
5、ServiceContractName設置為WCF服務的接口名字IService1。
右擊Send活動,選擇Create ReceivReply,這樣就創建了一個ReceivReply,它需要設置一個屬性:點擊Content設置如下:
最后流程如下圖所示:
這樣我們完成了Workflow的項目。
最后的WPF
由于WPFProject與WFProject是直接引用的關系,故在WPFProject直接引用WFProject的dll,如下圖。
由于要啟動WF,故還需添加工作流的System.Activities.dll引用。
在MainWindow窗體中拖一個按鈕,將文本改成:“Invoke Workflow”,在click事件中添加下面代碼:
1 IDictionary<string, object> results = WorkflowInvoker.Invoke(new Activity1());
2
3 MessageBox.Show(results["returnValue"].ToString());
這樣WPFProject 也完成了物流配貨網http://wlphw.com/ QQ在線:471226865。
調試與結果:
啟動WCPProject,如下圖:
啟動WPFProject。點擊Invoke Workflow,結果如下圖:
總結:
結合了WPF、WCF、WF實現了Hello world程序。
這篇文章用最簡單Hello World程序教你使用了三種最新技術。是不是值得你推薦一下,謝謝。:)
代碼:/Files/zhuqil/wpfwcfwf.rar
作者:朱祁林
出處:http://zhuqil.cnblogs.com
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
總結
以上是生活随笔為你收集整理的WPFWCFWF打造HelloWorld程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 专注嵌入式学习
- 下一篇: Ubuntu shutdown 关机、