WPF、WCF、WF打造Hello World程序

WCF,WPF,WF是什麼東西

WPF的全稱是Windows Presentation Foundation,是微軟新發布的Vista操作系統的三大核心開發庫之一,其主要負責的是圖形顯示,所以叫Presentation(呈現)。

作爲新的圖形引擎,WPF是基於DirectX的,當然增加了很多新的功能。其2D和3D引擎的強大看看Vista的界面就明白了,再加上其對Aero圖形引擎的支持,更加讓你剛到神奇。順便提一下,Aero是專門爲3D桌面開發的引擎,可以讓桌面實現神奇的3D翻轉,這絕對是操作系統有史以來的一次神奇嘗試,雖然對硬件配置的要求也是驚人的,此前已有相關報道稱,Vista對顯卡十分挑剔就是出於運行Aero的考慮。

Windows通信基礎(Windows Communication Foundation,WCF)是基於Windows平臺下開發和部署服務的軟件開發包(Software Development Kit,SDK)。WCF爲服務提供了運行時環境(Runtime Environment),使得開發者能夠將CLR類型公開爲服務,又能夠以CLR類型的方式使用服務。理論上講,創建服務並不一定需要WCF,但實際上,使用WCF卻可以使得創建服務的任務事半功倍。WCF是微軟對一系列產業標準定義的實現,包括服務交互、類型轉換、封送(Marshaling)以及各種協議的管理。

Windows Workflow Foundation(WF):工作流引擎,基於工作流的開發使程序的業務邏輯與代碼相分離,從而可以大大提高軟件開發的效率。
Windows Communication Foundation(WCF): 用於實現應用程序間(包含不同語言開發的程序)通信的技術,WCF構建在SOAP協議之上。
Windows Presentation Foundation(WPF):集成WebForm與WinForm於一體的界面開發方案

 

 

WPF、WCF、WF打造Hello World程序

英文版: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:

   [ServiceContract]
     public interface IService1
     {
        [OperationContract]
        string GetData();
     }
   添加類Service1:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->1     public class Service1 : IService1
     {
         public string GetData()
         {
             return string.Format("Hello World");
         }
     }

    App.config配置:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
     <system.serviceModel>
         <services>
             <service name="WCFProject.Service1" behaviorConfiguration="metadata">
                 <host>
                     <baseAddresses>
                         <add baseAddress="http://localhost:8001/Service1"/>
                     </baseAddresses>
                 </host>
                 <!--The BasicHttpBinding is used because the Workflow uses a generated ASP.Net proxy to communicate with this service-->
                 <endpoint binding="basicHttpBinding" contract="WCFProject.IService1"/>
             </service>
         </services>
         <behaviors>
             <serviceBehaviors>
                 <behavior name="metadata">
                     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                     <serviceMetadata httpGetEnabled="true"/>
                     <!-- 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 -->
                     <serviceDebug includeExceptionDetailInFaults="false"/>
                 </behavior>
             </serviceBehaviors>
         </behaviors>
         <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
     </system.serviceModel>
 </configuration>


 

   在Program.cs添加啓動WCF服務代碼:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1             using (ServiceHost host = new ServiceHost(typeof(Service1)))
             {
                 host.Open();
                 Console.WriteLine("The service is ready.");
                 Console.WriteLine("Press <ENTER> to terminate service.");
 
                 Console.ReadLine();
             }
以上實現了一個簡單的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事件中添加下面代碼:

            IDictionary<string, object> results = WorkflowInvoker.Invoke(new Activity1());
            MessageBox.Show(results["returnValue"].ToString());
 

    這樣WPFProject 也完成了。

調試與結果:

    啓動WCPProject,如下圖:

 

    啓動WPFProject。點擊Invoke Workflow,結果如下圖:

總結:

    結合了WPF、WCF、WF實現了Hello world程序。

     這篇文章用最簡單Hello World程序教你使用了三種最新技術。是不是值得你推薦一下,謝謝。:)

代碼點擊打開鏈接 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章