一、概述 Windows Communication Foundation(WCF)是由微軟發展的一組數據通信的應用程式開發介面,可以翻譯為Windows通訊介面,它是.NET框架的一部分。由 .NET Framework 3.0 開始引入。 WCF的最終目標是通過進程或不同的系統、通過本地網路或是 ...
一、概述
Windows Communication Foundation(WCF)是由微軟發展的一組數據通信的應用程式開發介面,可以翻譯為Windows通訊介面,它是.NET框架的一部分。由 .NET Framework 3.0 開始引入。
WCF的最終目標是通過進程或不同的系統、通過本地網路或是通過Internet收發客戶和服務之間的消息。
WCF合併了Web服務、.net Remoting、消息隊列和Enterprise Services的功能並集成在Visual Studio中。
WCF專門用於面向服務開發。
二、基於Asp.net 的應用程式開發與面向服務開發
在基於Asp.net 的應用程式開發中,我們由客戶機的瀏覽器訪問應用程式伺服器,然後通過應用程式伺服器中的資料庫連接去連接資料庫伺服器,讀取或是操作數據,有時候可能會多一個文件伺服器。大家可以觀察到,基本上所有的應用都放在了一臺伺服器上,但對於一個,由於業務上的需要(如:與外部系統交互),一臺伺服器很難支持所有的應用。我們再看下麵的圖:
客戶機使用瀏覽器訪問伺服器A,伺服器A為了業務需要與其他各種應用部署在伺服器B、C、D....再通過WCF技術互相通信,相互訪問...然而面向服務的好處不僅僅在此,他還提供了不同語言不同操作系統的可交互性..由於本文不是介紹SOA的文章,感興趣的同學可以參見:SOA
三、第一個WCF程式
1. 新建立空白解決方案,併在解決方案中新建項目,項目類型為:WCF服務應用程式。建立完成後如下圖所示:
2.刪除系統生成的兩個文件IService1.cs與Service1.svc。
3.添加自定義的WCF【服務文件】User.svc,此時vs2010會自動生成WCF介面文件IUser.cs,我們在IUser中定義WCF方法ShowName,在User.svc.cs對該介面的方法進行實現。
代碼如下:
using System.ServiceModel; namespace WCFService { [ServiceContract] public interface IUser { [OperationContract] string ShowName(string name); } } namespace WCFService { public class User : IUser { public string ShowName(string name) { string wcfName = string.Format("WCF服務,顯示姓名:{0}", name); return wcfName; } } }
大家可以看到,在WCF中的介面與普通介面的區別隻在於兩個上下文,其他的和我們正常學習的介面一樣。定義這個上下文要添加System.ServiceModel的引用。
[ServiceContract],來說明介面是一個WCF的介面,如果不加的話,將不能被外部調用。
[OperationContract],來說明該方法是一個WCF介面的方法,不加的話同上。
此時我們的第一個WCF服務程式就建立好了,將User.svc“設為起始頁”,然後F5運行一下試試,如下圖所示,VS2010自動調用了WCF的客戶端測試工具以便我們測試程式:
我們雙擊上圖中的 ShowName() 方法,出現如下圖:
在請求視窗中的值中輸入參數“你的姓名”,然後點擊“調用”,在響應視窗中會出現返回值“WCF服務,顯示姓名:你的姓名”,說明測試成功,點擊下麵的XML也可以看到XML的數據傳輸。我們現在建立好了服務的應用程式和業務邏輯,即非常簡單的列印姓名的方法,測試也成功了。那麼我們怎麼用呢?
四、場景
我們設計的場景是在生產中經常應用的場景,把WCF程式寄宿在IIS之上。假設場景如下:A伺服器和B伺服器。我們把我們剛剛建立的WCF程式“部署”在B伺服器上(本教程的A,B伺服器都放是我自己的一臺機器),我們的目標是在A伺服器的應用程式來訪問B伺服器的WCF程式,實現伺服器端的應用程式通訊。
五、將WCF程式寄宿在B伺服器的IIS之上
首先我們將WCF應用程式發佈一下,然後部署在B伺服器的IIS之上,如下圖所示:
滑鼠右鍵瀏覽Uesr.svc,在游覽器中出現如下圖所示,說明服務部署成功。
上圖中的http://localhost/User.svc?wsdl即為我們要引用的服務地址。
六、在客戶端[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的代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; //引用WCF服務的名稱空間 using WCFClient.WCFService; namespace WCFClient { public partial class WCFTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnClick(object sender, EventArgs e) { UserClient user = new UserClient(); string result = user.ShowName(this.txtName.Text); Response.Write(result); } } }
上面中的UserClient類是在添加引用的時候生成的服務端User類的客戶端代理類,一般客戶端代理類名稱都會是**Client。我們運行一下看下效果。
通過以上的例子,我們完成了由A伺服器的應用向B伺服器中WCF提供的方法的調用。這個例子比較簡單,對於經常開發B/S結構應用程式的同學們來說比較好理解。
八、說明:因為網上的入門教程比較少,本教程只做入門,後面會繼續講些其他入門的東西,深入的請看園子里:Artech 大哥的文章。
九、代碼下載:
原文鏈接:http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html