1、概述html
Windows Communication Foundation(WCF)是由微軟發展的一組數據通訊的應用程序開發接口,能夠翻譯爲Windows通信接口,它是.NET框架的一部分。由 .NET Framework 3.0 開始引入。數據庫
WCF的最終目標是經過進程或不一樣的系統、經過本地網絡或是經過Internet收發客戶和服務之間的消息。瀏覽器
WCF合併了Web服務、.net Remoting、消息隊列和Enterprise Services的功能並集成在Visual Studio中。服務器
WCF專門用於面向服務開發。網絡
2、基於Asp.net 的應用程序開發與面向服務開發框架
在基於Asp.net 的應用程序開發中,咱們由客戶機的瀏覽器訪問應用程序服務器,而後經過應用程序服務器中的數據庫鏈接去鏈接數據庫服務器,讀取或是操做數據,有時候可能會多一個文件服務器。你們能夠觀察到,基本上全部的應用都放在了一臺服務器上,但對於一個,因爲業務上的須要(如:與外部系統交互),一臺服務器很難支持全部的應用。咱們再看下面的圖:工具
客戶機使用瀏覽器訪問服務器A,服務器A爲了業務須要與其餘各類應用部署在服務器B、C、D....再經過WCF技術互相通訊,相互訪問...然而面向服務的好處不只僅在此,他還提供了不一樣語言不一樣操做系統的可交互性..因爲本文不是介紹SOA的文章,感興趣的同窗能夠參見:SOApost
3、第一個WCF程序學習
1. 新創建空白解決方案,並在解決方案中新建項目,項目類型爲:WCF服務應用程序。創建完成後以下圖所示:測試
2.刪除系統生成的兩個文件IService1.cs與Service1.svc。
3.添加自定義的WCF【服務文件】User.svc,此時vs2010會自動生成WCF接口文件IUser.cs,咱們在IUser中定義WCF方法ShowName,在User.svc.cs對該接口的方法進行實現。
代碼以下:
1 using System.ServiceModel; 2 3 namespace WCFService 4 { 5 [ServiceContract] 6 public interface IUser 7 { 8 [OperationContract] 9 string ShowName(string name); 10 } 11 } 12 13 14 namespace WCFService 15 { 16 public class User : IUser 17 { 18 public string ShowName(string name) 19 { 20 string wcfName = string.Format("WCF服務,顯示姓名:{0}", name); 21 return wcfName; 22 } 23 } 24 }
你們能夠看到,在WCF中的接口與普通接口的區別只在於兩個上下文,其餘的和咱們正常學習的接口同樣。定義這個上下文要添加System.ServiceModel的引用。
[ServiceContract],來講明接口是一個WCF的接口,若是不加的話,將不能被外部調用。
[OperationContract],來講明該方法是一個WCF接口的方法,不加的話同上。
此時咱們的第一個WCF服務程序就創建好了,將User.svc「設爲起始頁」,而後F5運行一下試試,以下圖所示,VS2010自動調用了WCF的客戶端測試工具以便咱們測試程序:
咱們雙擊上圖中的 ShowName() 方法,出現以下圖:
在請求窗口中的值中輸入參數「你的姓名」,而後點擊「調用」,在響應窗口中會出現返回值「WCF服務,顯示姓名:你的姓名」,說明測試成功,點擊下面的XML也能夠看到XML的數據傳輸。咱們如今創建好了服務的應用程序和業務邏輯,即很是簡單的打印姓名的方法,測試也成功了。那麼咱們怎麼用呢?
4、場景
咱們設計的場景是在生產中常常應用的場景,把WCF程序寄宿在IIS之上。假設場景以下:A服務器和B服務器。咱們把咱們剛剛創建的WCF程序「部署」在B服務器上(本教程的A,B服務器都放是我本身的一臺機器),咱們的目標是在A服務器的應用程序來訪問B服務器的WCF程序,實現服務器端的應用程序通信。
5、將WCF程序寄宿在B服務器的IIS之上
首先咱們將WCF應用程序發佈一下,而後部署在B服務器的IIS之上,以下圖所示:
鼠標右鍵瀏覽Uesr.svc,在遊覽器中出現以下圖所示,說明服務部署成功。
上圖中的http://localhost/User.svc?wsdl即爲咱們要引用的服務地址。
6、在客戶端[A服務器]建立服務的引用
咱們這裏以Web應用程序爲例,創建地物理地址爲本機,可是你們能夠想像成B服務器是遠程計算機,localhost爲一個其餘的IP地址。
新建解決方案,而且建立ASP.NET Web應用程序的項目。命名爲:WCFClient,以下圖所示:
(1)新建Asp.net頁面,命名爲:WcfTest.aspx。
(2)添加在第五步中部署的服務的引用。以下圖所示:
此時彈出添加服務引用的窗體,以下圖所示:
咱們在地址裏寫上咱們寄宿在IIS上的WCF服務的地址服務路徑,此處爲:http://localhost/User.svc?wsdl,在名稱空間處填寫WCFService[此名稱空間要在下面的客戶端中引用]而後點擊「前往」-->「肯定」按鈕。此時咱們完成了對服務的引用。咱們再次查看解決方案,裏面多了Service References的文件夾,經過資源管理器打開后里面多了些文件,這些文件用於客戶端向服務端的調用,如今先不用管他。
七、使用WCF服務端的方法
WcfTest.aspx的代碼以下:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WCFTest.aspx.cs" Inherits="WCFClient.WCFTest" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 <html xmlns="http://www.w3.org/1999/xhtml"> 5 <head runat="server"> 6 <title></title> 7 </head> 8 <body> 9 <form id="form1" runat="server"> 10 <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br /> 11 <asp:Button ID="btnSubmit" runat="server" Text="測試WCF服務" OnClick="btnClick" /> 12 </form> 13 </body> 14 </html> 15 16 using System; 17 using System.Collections.Generic; 18 using System.Linq; 19 using System.Web; 20 using System.Web.UI; 21 using System.Web.UI.WebControls; 22 23 //引用WCF服務的名稱空間 24 using WCFClient.WCFService; 25 26 namespace WCFClient 27 { 28 public partial class WCFTest : System.Web.UI.Page 29 { 30 protected void Page_Load(object sender, EventArgs e) 31 { 32 33 } 34 35 protected void btnClick(object sender, EventArgs e) 36 { 37 UserClient user = new UserClient(); 38 string result = user.ShowName(this.txtName.Text); 39 Response.Write(result); 40 } 41 } 42 }
上面中的UserClient類是在添加引用的時候生成的服務端User類的客戶端代理類,通常客戶端代理類名稱都會是**Client。咱們運行一下看下效果。
經過以上的例子,咱們完成了由A服務器的應用向B服務器中WCF提供的方法的調用。這個例子比較簡單,對於常常開發B/S結構應用程序的同窗們來講比較好理解。
8、說明:由於網上的入門教程比較少,本教程只作入門,後面會繼續講些其餘入門的東西,深刻的請看園子裏:Artech 大哥的文章。
9、代碼下載:
10、版權