WCF服務開發與呼叫的完整示例
開發工具:VS2008
開發語言:C#
開發內容:簡單的許可權管理系統
第一步、建立WCF服務庫
點選確定,將建立一個WCF 服務庫示例程式,自動生成一個包括IService1.cs和Service1.cs兩個類檔案。我們可以直接對其修改開發我們的服務,但一般直接刪除。
第二步:開發實體類
在解決方案中,新增新類Module.cs
在類中要首先引入using System.Runtime.Serialization名稱空間
實體類具體程式碼如下:
namespace WcfServiceLib.model
{
/// <summary>
/// 模組實體
/// </summary>
[DataContract]
class Module
{
[DataMember]
public string ModuleNO;
[DataMember]
public string ModuleName;
}
}
為使在WCF服務被呼叫過程中科被序列化,在實體類前加[DataContract]標籤,實體類每個成員前加[DataMember]標籤
第三步:建立WCF服務介面
WCF服務要對外提供服務,需要建立服務的介面,宣告對外服務的內容。
在解決方案中新增新的介面類imoduleservice.cs,然後引入名門空間using System.ServiceModel;
具體程式碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using WcfServiceLib.model;
namespace WcfServiceLib.iservice
{
/// <summary>
/// 介面類
/// </summary>
[ServiceContract]
public interface imoduleservice
{
[OperationContract]
void AddModules(Module book);
[OperationContract]
Module GetModuleByID(string id);
[OperationContract]
void RemoveModule(string id);
[OperationContract]
void ModuleUpdate(Module book);
}
}
介面類前要加[ServiceContract]標籤,每個成員前要加[OperationContract]標籤,標籤的作用是保證外部呼叫可以訪問到該方法。
第四步:介面類的實現
實現第三步中宣告的介面類,只有這樣WCF服務才會正在提供服務。
在解決方案中新增介面實現類moduleservice,引入名稱空間using System.ServiceModel;
具體程式碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WcfServiceLib.iservice;
using System.ServiceModel;
using WcfServiceLib.model;
namespace WcfServiceLib.service
{
/// <summary>
/// 介面類實現
/// </summary>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
class moduleservice : imoduleservice
{
#region imoduleservice 成員
List<Module> _Modules = new List<Module>();
public void AddModules(Module m)
{
m.ModuleNO = Guid.NewGuid().ToString();
_Modules.Add(m);
}
public Module GetModuleByID(string id)
{
Module m = _Modules.Find(p => p.ModuleNO == id);
return m;
}
public void RemoveModule(string id)
{
Module m = _Modules.Find(p => p.ModuleNO == id);
_Modules.Remove(m);
}
public void ModuleUpdate(Module module)
{
Module m = _Modules.Find(p => p.ModuleNO == module.ModuleNO);
m.ModuleName = module.ModuleName;
}
#endregion
}
}
到此為止,WCF服務的主體就開發完成了,那麼如何才可以讓呼叫者使用這個服務呢?我們就需要吧WCF服務註冊併發布一下。
第五步:WCF服務釋出
在VS2008以上的版本中都提供了對WCF服務視覺化註冊和釋出的工具。
出現如下介面:
可以看到有兩個終結點,第一個是服務節點,第二個是元資料節點。由於我們是用VS自帶的服務庫專案來建立的,配置檔案中還沒有刪除這些資訊,所以第一個節點裡還保留著自帶的服務資訊Iservice.下面我們把這個服務更改為我們上文編寫的服務的資訊。
單擊左側的“Services”-“Services.Service1”在右側的Name,彈出“服務型別瀏覽器”對話方塊,在此型別中我們找到此WCF服務專案編譯出來的dll檔案,雙擊它就可以出現此服務中的對外公佈的服務,點選選中它單擊確定。
然後,我們展開左側“Services”->“WcfServiceLib.service.moduleservice”->“Endpoints”,單擊第一個“Empty Name”,從右邊的“EmptyProperties”中的Contract中我們可以看到,這裡的Contract仍然用的是Services.IService1。按照上文的步驟在走一遍,找到DLL後確定。
最後關閉配置視窗,儲存。
到此為止,服務就開發併發布完成了。接下來我們將WCF進行託管後就可以使用了。WCF服務託管有三種方式,最常用的是IIS託管。我們看一下WCF服務是如何進行IIS託管的。
第六步:WCF服務IIS釋出
1、在解決方案上右鍵新增網站,型別選擇WCF服務。
2、建立起來的新的WCF服務站點中在App_Code檔案中自動為我們生成兩個類檔案:IService.cs和Service.cs。這兩個檔案對我們來說沒有用,我們刪掉。
3、然後新增對WCF服務庫專案的引用。結果如下:
4、然後修改Service.svc檔案,程式碼如下:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLib.service.moduleservice" %>
5、在web.config上右擊選擇“編輯WCF配置”。
關閉WCF編輯工具,儲存即完成了服務的釋出配置。
6、在Service.svc上右擊,選擇“在瀏覽器中檢視”,在IE中執行此服務。
7、在IIS中部署站點,建立虛擬目錄指向該站點。然後瀏覽介面如下。
到此,WCF服務在IIS中託管成功。接下來,我們看一下如何使用WCF服務。
第七步:WCF服務的使用
1、新建Asp.net應用程式
2、右鍵點選“引用”--->新增服務引用
新增成功後,解決方案中檔案如下:
3、後臺呼叫WCF服務,程式碼如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ServiceReference1.imoduleserviceClient c = new WCF_Cilent.ServiceReference1.imoduleserviceClient();
c.AddModules(new WCF_Cilent.ServiceReference1.Module());
if (c.GetAllModule().Length > 0)
{
Response.Write(c.GetAllModule()[0].ModuleNO.ToString());
Response.End();
}
}
4、執行程式,出現如下呼叫結果,呼叫成功。