我的WCF開發框架簡化版及基於NET.TCP傳輸方式的實現


前面介紹很多關於我的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配置方式有所差別,下面介紹他們的配置內容。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM