前面介紹很多關於我的WCF開發框架的文章,前面的介紹思路,主要是基於一個整個倉庫管理系統來進行整體介紹的,本來另辟蹊徑,着重介紹一個備件信息的表的在我的WCF開發框架中,各層是如何體現的,通過簡單的一個表的操作,走完一個WCF開發過程,着重介紹一個對象類,如何實現整個wcf的應用。另外穿插介紹如何基於net.tcp傳輸方式實現wcf的應用,以及使用這種方式需要注重的地方等功能模塊的介紹。
我們先來看看我的WCF開發框架整體架構設計圖。
上圖中,值得注意的是,WCF服務層,可以Host(寄宿)在IIS中,也可以Host在Console控制台應用程序中,或者Windows服務中等方式。
WCF 代理層一般通過在程序中添加服務引用的方式添加,添加成功后會自動生成WCF客戶端的代理層,類似於添加WebService的方式。
UI可以是Winform的實現、也可以是Web的方式實現,甚至還可以是其他方式的UI實現。由於我前面介紹的WCF開發框架中,主要以Winform方式來體現,本文就另外使用asp.net的Web方式來簡單介紹使用WCF服務的例子,通過簡單的調用使用,我們更加清晰其調用邏輯,更好的串聯起來整個WCF開發框架的實現思路。
1、 WCF服務開發
首先我們來了解一個WCF服務的開發,需要實現那些東西。從下圖可以看到,需要獨立一個實體類層,因為實體類是需要很多地方引用的,獨立又很多好處。
其次就是業務層,它需要把我們的業務邏輯+數據訪問層(可以實現多種數據庫的操作)放到一起,這樣作為一個整體的項目工程,更加方便管理。
創建一個WCF服務工程,添加一些必要的接口層以及配置信息,就可以實現了。具體的操作過程,可以參考《基於我的Winform開發框架擴展而成的WCF開發框架》這篇文章的介紹。
其中WCF服務層的開發就差不多定型了,您需要做的就是完善整個業務邏輯以及服務的調用(調用業務邏輯相關信息),如果你是使用我的WCF開發框架,所有基類的東西(包括業務層各種基類,WCF服務層的基類接口及服務基類)都是可以不用操心的,只需要實現自己的業務邏輯即可。
2、WCF服務發布及調用
通過以上的步驟1創建了WCF服務后,接下來就是如何Host我們創建的WCF服務並在客戶進行調用了。WCF服務一般建議通過IIS的Host方式,這樣方便管理也方便操作。如果您發布的WCF服務是net.tcp的傳輸方式,而且你的IIS是XP或者Win2003的,那么只能通過控制台的Host方式進發布服務了。因為Net.tcp的寄宿方式是需要IIS7以上的版本才可以。
控制台的Host方式也很簡單,通過應用步驟1的WCF服務項目,然后再Program.cs類中實現下面的代碼即可。
static void Main(string[] args) { try { ServiceHost serviceHost = new ServiceHost(typeof(ItemDetailService)); serviceHost.Open(); Console.WriteLine("服務正在進行偵聽......"); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex); Console.ReadLine(); } }
運行后,效果如下所示,就表示WCF順利通過控制台Host成功了。
WCF客戶端(本例為asp.net例子)的調用代碼如下所示.
namespace TestNetTcpApp { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { BindData(); } } private void BindData() { ItemDetailServiceClient client = new ItemDetailServiceClient(); DataTable dt = client.FindToDataTable(string.Format("ItemName like '%六角螺栓%' or ItemName like '%軸承%'")); if (dt != null) { dt.Columns.Add("Seq", typeof(int)); int i = 0; foreach (DataRow dr in dt.Rows) { dr["Seq"] = i++; } } this.dg.DataSource = dt; this.dg.DataBind(); //new ItemDetailServiceClient().Using(client => //{ // this.dg.DataSource = client.Find(string.Format("ItemName like '%六角螺栓%'")); // this.dg.DataBind(); //}); } } }
以上是簡單的數據綁定例子,唯一值得注意的就是,本例因為考慮通過net.tcp的方式進行數據傳輸(也就是網絡式局域網內的),因此在調用的頁面,將會顯示上千條的數據進行測試。如下界面所示。
3、配置信息要求。
一般的WCF服務,服務的Web.Config和調用客戶的配置文件,都要對服務的相關參數進行配置,否則,很容易出現各種各種的錯誤提示,有響應超時、數據字節數超過支持數量、或者集合列表數據量大於設定值等等相關的錯誤。
1)數據量大或者集合大的配置
對於集合數據比較大,或者數量比較多的時候,如上傳的圖片字節比較大、返回的列表集合比較大等情況,會出現調用錯誤,其實這些都是因為配置參數的問題,修改即可避免,但是如果開始就知道避免,會減少反復調試的時間,提高開發效率。
2)Net.tcp的參數配置
這種方式一般是考慮在內外(局域網內)的服務調用考慮,這個調用響應會比較快,但是和傳統的http配置方式有所差別,下面介紹他們的配置內容。