初次據說WCF是人事重構前期,在老師那裏聽到的這個詞,當時對它沒有概念,只知道它屬於一種分佈式的開發框架。如今開始參加ITOO項目,再次接觸到WCF,ITOO框架中包含着WCF,因此必須進行系統學習了。html
WCF,全稱Windows Communication Foundation,是有微軟開發的一系列支持數據通訊的應用程序框架,能夠翻譯爲Windows 通信開發平臺。它是Windows平臺上開發分佈式應用最佳的實踐方式。(來自百度)瀏覽器
組成部分:安全
一、網絡服務的協議,即用什麼網絡協議開放客戶端接入。服務器
二、業務服務的協議,聲明服務提供哪些業務。網絡
三、數據類型聲明,對客戶端與服務器端通訊的數據部分進行一致化。框架
四、傳輸安全性的相關定義。分佈式
契約:學習
WCF 的基本概念是以契約(Contract) 來定義雙方溝通的協議,合約必需要以接口的方式來體現,而實際的服務代碼必需要由這些合約接口派生並實現。合約分紅了四種:
數據契約(Data Contract),訂定雙方溝通時的數據格式。測試
服務契約(Service Contract),訂定服務的定義。ui
操做契約(Operation Contract),訂定服務提供的方法。
消息契約(Message Contract),訂定在通訊期間改寫消息內容的規範。
上述內容是從百度中找到的關於WCF的一些基本概念,僅有這些概念是不行的,須要在實踐中加深本身的認識和理解,下面經過一個小Demo來加深印象。
打開vs,選擇Visual C# --> WCF --> WCF服務應用程序,以下圖所示:
解決方案創建以後,程序會默認生成Servic和IService,咱們也能夠自行建立服務,以下:
建好的界面以下所示:
此時咱們的Server端已經建好,Server端的代碼以下:
IUser:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WCFServerDemo { // 注意: 使用「重構」菜單上的「重命名」命令,能夠同時更改代碼和配置文件中的接口名「IUser」。 //下面的兩個契約標籤必須有,使client端在引用時,能夠識別是Server端的接口 [ServiceContract] //服務契約 public interface IUser { [OperationContract] //操做契約 string showName(string name); } }
User:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WCFServerDemo { // 注意: 使用「重構」菜單上的「重命名」命令,能夠同時更改代碼、svc 和配置文件中的類名「User」。 // 注意: 爲了啓動 WCF 測試客戶端以測試此服務,請在解決方案資源管理器中選擇 User.svc 或 User.svc.cs,而後開始調試。 public class User : IUser { //實現顯示名稱的方法 public string showName(string name) { return name +":WCF學習"; } } }
服務端創建好以後,須要進行發佈,而後才能應用於client端。這裏爲了方便,就不在進行發佈,用另一種方法進行簡單的獲取Server端路徑。郵件選擇「在瀏覽器中查看」:
顯示效果以下:
將上述的紅色框中的地址複製,而後進行建立咱們的client端。
首先創建一個空的Web應用程序:
添加服務引用:
效果顯示:
添加完引用以後,再添加一個Web窗體:
HTML代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="User.aspx.cs" Inherits="WCFClientDemo.User" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> <asp:Button ID="btnShow" runat="server" Text="Button" OnClick="btnShow_Click" /> </div> </form> </body> </html>實現代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WCFClientDemo.ServiceReference; //添加引用 namespace WCFClientDemo { public partial class User : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnShow_Click(object sender, EventArgs e) { //實例化UserClient,此類是經過添加Server端引用以後產生,主要是跟Server端創建鏈接 UserClient user = new UserClient(); //調用Server端方法 string result = user.showName(this.txtUserName.Text ); Response.Write(result); } } }
到此服務端和客戶端就建立完成,在運行客戶端以前,必須啓動服務端。最終的顯示效果以下:
剛開始接觸WCF時,好多東西都不是特別明瞭,並且一開始傳參時用的是實體,不知道傳實體時還須要用到一些其餘知識,好比數據契約的內容等,出現了好多錯誤。不過,也正是由於這些錯誤,讓本身對WCF的運用機制更加熟悉。這還只是皮毛,還須要在從此的學習中深刻學習WCF的調用過程以及它的做用機制。