1. 程式人生 > >無廢話WCF入門教程六[一個簡單的Demo]

無廢話WCF入門教程六[一個簡單的Demo]

一、前言

    前面的幾個章節介紹了很多理論基礎,如:什麼是WCF、WCF中的A、B、C。WCF的傳輸模式。本文從零開始和大家一起寫一個小的WCF應用程式Demo。

    大多框架的學習都是從增、刪、改、查開始來學習的,我們學習WCF也是一樣的。從簡單來看(不包括安全、優化等相關問題),WCF的增刪改查和WebForm相差無幾。WCF只是把具體“實現”寫在“Service端”,而“呼叫”放在了“Client端”。覺得有幫助別忘了點個贊哈,謝謝哦~

二、Demo說明

1)Demo的 “Service端”以本機IIS為宿主,“Client端”以WebForm專案為例。

2)Demo的“Service端”提取資料採用初學者比較容易接受的分層結構進行搭建,分別分為服務層、實體層、資料層。

引用關係如下圖所示:

3)Demo以資料庫為SqlServer,表User為例(sql語句在下載的壓縮包中Init.sql),表結構如下所示:

欄位名

列名

資料型別

約束

生成方式

使用者編號

UserID

int

主鍵,必須輸入

自動增+1

姓名

Name

varchar(200)

非必須輸入

人工輸入

密碼

Password

varchar(200)

非必須輸入

人工輸入

描述

Discribe

varchar(800)

非必須輸入

人工輸入

提交時間

SubmitTime

datetime

非必須輸入

人工輸入

三、建立Service端宿主

1)建立WCF應用程式命名為:WCF.Demo.Service,如下圖:

2)刪除預設檔案IService.csService.svc。並分別建立增、刪、改、查”Add.svc”“Save.svc”“Remove.svc”“Get.svc,Search.svc”,分別對應4個功能的服務應用程式

WCF服務應用程式,並建立資料操作層和資料實體層,如下圖:

3)增加實體層和資料操作層程式碼,如下所示:

 1     //使用者實體
 2     [DataContract]
 3     public class User
 4     {
 5         [DataMember]
 6         public int UserID { get; set; }
 7         [DataMember]
 8         public string UserName { get; set; }
 9         [DataMember]
10         public string Password { get; set; }
11         [DataMember]
12         public string Discribe { get; set; }
13         [DataMember]
14         public DateTime SubmitTime { get; set; }
15     }
16     //資料操作,呼叫SqlHeler
17     public class User
18     {
19         private static readonly string connectionString = "server=.;database=wcfDemo;uid=sa;pwd=123456;";
20 
21         //新增
22         public static bool Add(Model.User user)
23         {
24             string sql = string.Format("INSERT INTO [dbo].[User]([UserName],[Password],[Discribe],[SubmitTime]) VALUES('{0}','{1}','{2}','{3}')", user.UserName, user.Password, user.Discribe, user.SubmitTime);
25             int result = SqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, sql);
26             if (result > 0)
27                 return true;
28             else
29                 return false;
30         }
31 
32         //修改
33         public static bool Save(Model.User user)
34         {
35             string sql = string.Format("UPDATE [dbo].[User] SET [UserName] = '{0}',[Discribe] = '{2}',[SubmitTime] = '{3}' WHERE UserID = {4}", user.UserName, user.Password, user.Discribe, user.SubmitTime, user.UserID);
36             int result = SqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, sql);
37             if (result > 0)
38                 return true;
39             else
40                 return false;
41         }
42 
43         //刪除
44         public static bool Remove(int UserID)
45         {
46             string sql = string.Format("DELETE FROM [dbo].[User] WHERE UserID = {0}", UserID);
47             int result = SqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, sql);
48             if (result > 0)
49                 return true;
50             else
51                 return false;
52         }
53 
54         //獲取使用者
55         public static Model.User Get(int UserID)
56         {
57             Model.User user = new Model.User();
58             string sql = string.Format("SELECT * FROM [dbo].[User] WHERE UserID = {0}", UserID);
59             DataSet ds = SqlHelper.ExecuteDataset(connectionString, CommandType.Text, sql);
60             if (ds != null && ds.Tables.Count > 0)
61             {
62                 foreach (DataRow dr in ds.Tables[0].Rows)
63                 {
64                     user.UserID = Convert.ToInt32(dr["UserID"]);
65                     user.UserName = dr["UserName"].ToString();
66                     user.Password = dr["Password"].ToString();
67                     user.Discribe = dr["Discribe"].ToString();
68                     user.SubmitTime = Convert.ToDateTime(dr["SubmitTime"]);
69                 }
70             }
71             return user;
72         }
73 
74         //獲取使用者列表
75         public static List<Model.User> GetUsers()
76         {
77             List<Model.User> Users = new List<Model.User>();
78             string sql = string.Format("SELECT * FROM [dbo].[User]");
79             DataSet ds = SqlHelper.ExecuteDataset(connectionString, CommandType.Text, sql);
80             if (ds != null && ds.Tables.Count > 0)
81             {
82                 foreach (DataTable dt in ds.Tables)
83                 {
84                     foreach (DataRow dr in dt.Rows)
85                     {
86                         Model.User user = new Model.User();
87                         user.UserID = Convert.ToInt32(dr["UserID"]);
88                         user.UserName = dr["UserName"].ToString();
89                         user.Password = dr["Password"].ToString();
90                         user.Discribe = dr["Discribe"].ToString();
91                         user.SubmitTime = Convert.ToDateTime(dr["SubmitTime"]);
92                         Users.Add(user);
93                     }
94                 }
95             }
96             return Users;
97         }
98     }

4)修改Add介面的程式碼和實現,如下所示:

 1     [ServiceContract]
 2     public interface IAdd
 3     {
 4         [OperationContract]
 5         bool DoWork(Model.User user);
 6     }
 7 
 8     public class Add : IAdd
 9     {
10         public bool DoWork(Model.User user)
11         {
12             return DAL.User.Add(user);
13         }
14     }

 5)修改Save介面的程式碼和實現,如下所示:

 1     [ServiceContract]
 2     public interface ISave
 3     {
 4         [OperationContract]
 5         bool DoWork(Model.User user);
 6     }
 7 
 8     public class Save : ISave
 9     {
10         public bool DoWork(Model.User user)
11         {
12             return DAL.User.Save(user);
13         }
14     }

6)修改Remove介面的程式碼和實現,如下所示:

 1     [ServiceContract]
 2     public interface IRemove
 3     {
 4         [OperationContract]
 5         bool DoWork(int UserID);
 6     }
 7     public class Remove : IRemove
 8     {
 9         public bool DoWork(int UserID)
10         {
11             return DAL.User.Remove(UserID);
12         }
13     }

7)修改Search介面的程式碼和實現,如下所示:

 1     [ServiceContract]
 2     public interface ISearch
 3     {
 4         [OperationContract]
 5         List<Model.User> DoWork();
 6     }
 7 
 8     public class Search : ISearch
 9     {
10         List<Model.User> ISearch.DoWork()
11         {
12             return DAL.User.GetUsers();
13         }
14     }

8)修改Get介面的程式碼和實現,如下所示:

 1     [ServiceContract]
 2     public interface IGet
 3     {
 4         [OperationContract]
 5         Model.User DoWork(int UserID);
 6     }
 7 
 8     public class Get : IGet
 9     {
10         public Model.User DoWork(int UserID)
11         {
12             return DAL.User.Get(UserID);
13         }
14     }

四、部署服務端程式

1)將程式釋出,並部署到IIS上,設定埠:8080,如下圖所示:

2)以Add.svc服務應用程式為目標,測試部署是否成功,成功後如下圖所示:

五、建立Client端Web應用程式

新建WebForm專案WCF.Demo.Client,並建立增刪改查檔案,Add.aspx,Save.aspx,SearchAndRemove.aspx。如下圖所示:

六、使用SvcUtil.exe生成客戶端程式碼和配置

SvcUtil.exe是一個VS命令列工具,該工具位於:C:\Program Files\Microsoft  SDKs\Windows\v7.0A\bin 或 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\一般情況下我們將SvcUtil.exe新增到VS開發工具中方便以後的運用(也可直接使用該命令列工具)。

1)在VS中的 Tools選單---選擇External Tools,開啟管理視窗如下圖所示:

在Title中輸入SvcUtil,Command中選擇SvcUtil.exe全路徑,Initial  directory欄選擇生成的客戶端程式碼和配置檔案所放的目錄(此處為解決方案所在目錄),選上Prompt for arguments,不選上Close on  exit。點選OK.

2)新增完成後,在VS的工具下會出現這個選單。如下圖所示:

3)在Client端新增對服務的引用。開啟SvUtil工具,在Arguments裡填寫服務的地址,如下圖:

點選OK後出現下圖,說明程式碼類和配置檔案生成成功(在解決方案目標下),如下圖所示:

相關推薦

廢話WCF入門教程[一個簡單Demo]

一、前言     前面的幾個章節介紹了很多理論基礎,如:什麼是WCF、WCF中的A、B、C。WCF的傳輸模式。本文從零開始和大家一起寫一個小的WCF應用程式Demo。     大多框架的學習都是從增、刪、改、查開始來學習的,我們學習WCF也是一樣的。從簡單來看(不包括安全、優化等相關問題),WCF的增

廢話MVC入門教程[Model中的驗證規則]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話WCF入門教程三[WCF的宿主]

1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <system.serviceModel> 4 <services> 5 <service

廢話WCF入門教程一[什麼是WCF]

1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WCFTest.aspx.cs" Inherits="WCFClient.WCFTest" %> 2 3 <!DOCTYPE html PUBLIC "-//W

廢話WCF入門教程四[WCF的配置檔案]

1 <?xml version="1.0"?> 2 <configuration> 3 <system.serviceModel> 4 5 6 <!--服務--> 7 <services>

廢話WCF入門教程五[WCF的通訊模式]

1 //配置檔案中的 binding 指定 2 <endpoint address="" binding="wsDualHttpBinding" contract="WCFService_DualPlex.IUser"></endpoint> 3 4 //服務端介面

廢話WCF入門教程二[WCF應用的通訊過程]

1 <?xml version="1.0" encoding="utf-8"?> 2 3 <!-- 4 有關如何配置 ASP.NET 應用程式的詳細訊息,請訪問 5 http://go.microsoft.com/fwlink/?LinkId=169433 6

廢話MVC入門教程二[第一個Demo]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話SharePoint入門教程二[SharePoint發展、工具及術語]

一、前言 1.由於上一篇文章的標題命名失誤,此篇標題寫給百度搜索”什麼是SharePoint”。 2.關於什麼是SharePoint,請參見本人的第一篇文章:http://www.cnblogs.com/iamlilinfeng/p/3026332.html 二、目錄 1.Share

廢話SharePoint入門教程一[SharePoint概述]

一、前言     聽說SharePoint也有一段時間了,可一直處在門外。最近被調到SharePoint實施專案小組,就隨著工作一起學習了一下實施與開發。但苦於網上SharePoint入門的東西實在太少,導致自學入門很難,不知道SharePoint這東西到

廢話SharePoint入門教程四[建立SharePoint母版頁]

一、前言 文章成體系,如果有不明白的地方請檢視前面的文章。 二、目錄 1.建立HTML頁面 2.將HTML檔案轉換為SharePoint母版頁 3.在 SPD中修改母版頁“PlaceHolderMain程式碼段”位置 4.釋出母板頁 5.使用母版頁 6.最終效果

廢話SharePoint入門教程三[建立網站集和網站]

一、前言     前兩篇文章講解了什麼是SharePoint,並且介紹了在SharePoint中一些常用的概念。但概念終究是概念,我們還是要腳踏實地的去動手實踐。下面的文章對於瞭解SharePoint的人來說過於簡單,但由於本系列是入門教程,所以從最簡單的入手並一步一步深入

廢話SharePoint入門教程五[建立SharePoint頁面佈局]

一、前言 文章成體系,如果有不明白的地方請檢視前面的文章。 二、目錄 1.建立頁面佈局 2.首次使用頁面佈局 3.修改頁面佈局 4.使用頁面佈局 5.最終效果 1.建立頁面佈局 (1)開啟設計管理器,並點選【建立頁面佈局】如下圖所示: (2)填寫名稱、

廢話MVC入門教程八[MvcPager分頁控制元件的使用]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話MVC入門教程九[實戰一:使用者註冊與登陸]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話MVC入門教程一[概述、環境安裝、建立專案]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話MVC入門教程七[Control中使用AOP]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話MVC入門教程十[實戰二:使用者管理]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話MVC入門教程三[路由設定及檢視入門]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

廢話MVC入門教程五[Control與View互動]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、