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測試客戶端窗口長看到WCF服務的地址:http://localhost:2059/User.svc
我們可以在其他項目中添加服務引用來添加WCF服務,當然也可以把WCF服務發布到IIS上,然后然別人去調用。
接下來我們就以發布到IIS為例:
首先我們將WCF應用程序發布一下,然后部署在B服務器的IIS之上,如下圖所示:
鼠標右鍵瀏覽Uesr.svc,在游覽器中出現如下圖所示,說明服務部署成功。
上圖中的http://localhost/User.svc?wsdl即為我們要引用的服務地址。因為我們的IIS是在同一台計算機上,所以是localhost
我們這里以Web應用程序為例。
新建解決方案,並且創建ASP.NET Web應用程序的項目。命名為:WCFClient,如下圖所示:
(1)新建Asp.net頁面,命名為:WcfTest.aspx。
(2)添加在第五步中部署的服務的引用。如下圖所示:
此時彈出添加服務引用的窗體,如下圖所示:
我們在地址里寫上我們寄宿在IIS上的WCF服務的地址服務路徑,此處為:http://localhost/User.svc?wsdl,在名稱空間處填寫WCFService[此名稱空間要在下面的客戶端中引用]然后點擊“前往”-->“確定”按鈕。此時我們完成了對服務的引用。我們再次查看解決方案,里面多了Service References的文件夾,通過資源管理器打開后里面多了些文件,這些文件用於客戶端向服務端的調用,現在先不用管他。
WcfTest.aspx.cs的代碼如下:
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); } } }