WCF(一) Windows Communication Foundation 概述


 我希望能用連續的幾篇博文,記錄下自己學習WCF的過程,同時也為了能和大家一起交流分享自己學習WCF的心得。

學習WCF的英文資料對英文基礎不太好的人來說有些難以接受了,中文書籍不太多,好不容易有兩本,又寫的像研究生畢業論文一樣。

所以,我想寫點自己的WCF文章,希望能對自己的WCF知識起到促進作用,又能和大家一起交流,幫助到大家理解WCF。

宗旨:我不會用中文的專業術語(例如:協定,地址,綁定,通道,終結點,宿主,單工、雙工,回調等),因為用一個英文單詞可以被多個人翻譯成多個中文詞語,這樣不好。我堅持使用英文的原本單詞(如:contract,Address,binding,pipe,endpoint,host,one-way ,duplicate,call back)。

本人最為“痛恨”那種滿口專業術語講技術概念的人。如果學習所有的技術都要先被大量技術名詞搞暈掉,那學習實在是太痛苦了。我見識過這樣的一本書:當你隨意翻開一頁,隨意找出一段讀一讀,會發現根本不知道作者在講什么,因為全是難懂的技術名詞和概念。遇到這種情況,英文再差的人寧可去讀英文資料。我崇尚的技術教學或交流是通俗易懂的。不論多么復雜的新/舊技術,能簡單的一定簡簡單單的講出來。做到這一點其實不難,個人認為,作者只需用自己的話來講就完全可以,越是照搬學術的東西,“貌似權威的”,卻是缺少大眾親和力。畢竟大部分人學習的目的不是去作秀寫論文,而是去寫自己的實實在在的代碼的。呵呵。願IT界的明天更加美好吧。

閑言少敘,書歸正傳。

=======================================================================

WCF被推出來很久了,但是對於剛剛接觸WCF的人們來說,想必會有以下問題:

WCF是什么?為什么我們需要WCF?WCF能給我們帶來什么?學習WCF的難易度如何?

以上這些問題的答案在網上已經很多介紹了,我在此本不必再浪費口舌,只是大概提一下。

WCF: Windows Communication Foundation.從名字可以看出,這是一項和通信密切相關的技術。我們知道軟件設計到處是通信。當然我們必須學了以后,才能更好的知道它、運用它,而不能單單從它的名字揣測它的威力如何。

WCF提供給了我們一種面向服務(SOA)的程序設計的解決方案:何為面向服務?之前有使用過.NET Web Service 開發的朋友,很容易理解面向服務是咋回事。.Net Web Service也是更早的時候微軟提出的一種面向服務的解決方案。面向服務是一種標准,不同的公司可以給出各自的實現框架。單純的講SOA,畢竟太抽象了。學習一下SOA的一種實現比如.Net Web Service 或WCF以后,相信不用任何文字定義,你也會深刻地理解SOA。所以,何為面向服務?這里不解釋,等你學一段時間的WCF,你自己就有答案了,真的,呵呵。

WCF提供了統一的通信模型:以前我們寫通信可以是:TCP/UDP,Socket等這些方式,在WCF中被統一了。至於如何統一?這里先不說了。所以,當你在項目中同時使用了多種通信方式時,可以考慮使用WCF了。

以前沒有接觸過Web Service 開發接受WCF也不是難事,相信我!

這次,我們只做一點WCF的概述,更為詳細的知識到后面再慢慢展開。邊學習,邊交流。

1. 打開VS 2010 -->file-->new Project ,選擇C#下面的WCF,選擇WCF Library。如下圖:

2.此時有了IService 文件和一個Service 文件。Service文件實現的IService中的兩個函數:GetData函數和GetDataUsingDataContract函數。至於這兩個函數是干嘛的?想必不用說大家都能看懂的。之后詳細說明他們的角色。這里也不修改類名和函數名了,方面起見。

3.按F5運行程序,此時打開了一個WCF 的一個測試 窗口。如下圖:先測試GetData函數

測試結果:

同樣的方法測試GetDataUsingDataContract函數:結果如下圖

4.上面完成了對WCF的函數功能的簡單測試,能說明的是Service正確地實現了IService。接下來我們需要將這個WCF部署到一個Web Site中。

在解決方案上面右擊:New -->New Web Site 如下圖:

修改web site項目中的Service.svc 文件里面的 Service="WcfFirstDemoServiceLib.Service1" (其中意思就是已命名空間加類名的方式指定service的名字)

 

 5.添加一個winForm程序 ,用它來調用WCF的函數。

6.給winForm 項目添加web 引用:

7.在Form1上面添加幾個控件,然后再在Form1.cs中添加下列幾行代碼:

Form1.cs
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using WCFClient.WCFServiceDemo;
10 
11 namespace WCFClient
12 {
13     public partial class Form1 : Form
14     {
15         Service1Client proxy = null;
16         CompositeType ctin = null;
17         CompositeType ctout = null;
18         public Form1()
19         {
20             InitializeComponent();
21         }
22 
23         private void btnGetData_Click(object sender, EventArgs e)
24         {
25             this.tbOutputBox.Text = proxy.GetData(Convert.ToInt32(this.tbInputbox.Text));
26         }
27 
28         private void Form1_Load(object sender, EventArgs e)
29         {
30             proxy = new Service1Client();
31 
32         }
33 
34         private void button2_Click(object sender, EventArgs e)
35         {
36             ctin = new CompositeType();
37             ctin.StringValue = this.tbInputCTStrvalue.Text;
38             ctin.BoolValue = this.rboxInTrue.Checked;
39             
40             ctout = proxy.GetDataUsingDataContract(ctin);
41 
42             this.tbOutputCTStrvalue.Text = ctout.StringValue;
43             if (ctout.BoolValue)
44             {
45                 this.rboxOutTrue.Checked = true;
46             }
47             else
48             {
49                 this.rboxOutFalse.Checked = true;
50             }
51         
52         }
53     }
54 }

8.Ctrl+F5 運行:

 

說明:這里只是概述WCF,所以全部在使用WCF的默認設置,也沒有詳細說明每一步的作用是什么。只是給出三個項目:項目1是WCF的庫也是WCF功能核心。項目2是WCF的host用於向外界發布WCF提供的接口(:接口這里指提供了哪些函數可被調用)。項目3是WCF的客戶端用於調用WCF。其實,這里已經隱約體現出一點點分布式軟件架構的意思了:有專門提供功能實現的模塊,有專門提供對外公開接口的模塊,有專門作為調用的模塊。

后面詳細WCF每一部分的。歡迎關注!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM