WCF學習之旅—第三個示例(二十七)

来源:http://www.cnblogs.com/chillsrc/archive/2016/10/27/6003137.html
-Advertisement-
Play Games

通過前面二十幾個章節的學習,我們知道了什麼是WCF;WCF中的A、B、C;WCF的傳輸模式;WCF的寄宿方式;WCF的異常處理。本文綜合應用以上知識點,一步一步寫一個小的WCF應用程式——書籍管理系統(BookMgr)。 這個示例就是一個非常簡單的書籍管理系統,功能有:查詢、修改、新增... ...


一、前言

      通過前面二十幾個章節的學習,我們知道了什麼是WCF;WCF中的A、B、C;WCF的傳輸模式;WCF的寄宿方式;WCF的異常處理。本文綜合應用以上知識點,一步一步寫一個小的WCF應用程式——書籍管理系統(BookMgr)。

      這個示例就是一個非常簡單的書籍管理系統,功能有:查詢、修改、新增、刪除(不包括安全、優化等相關問題)、異常處理。WCF的增刪改查和WinForm相差無幾。WCF只是把具體“實現”寫在“服務端”,而“調用”放在了“客戶端”。

二、BookMgr說明

1)Demo的 “服務端”以本機控制台應用程式為宿主,“客戶端”以WinForm項目為例。

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

引用關係如下圖所示:

3)Demo資料庫為SqlServer,表為Books(sql語句在下載的壓縮包中“初始化腳本.sql”),表結構如下所示:

欄位名

列名

數據類型

約束

生成方式

書籍編號

BookID

int

主鍵,必須輸入

自增

書名

Name

nvarchar(200)

必須輸入

人工輸入

類別

Category

nvarchar(50)

必須輸入

人工輸入

出版數量

Numberofcopies

int

必須輸入

人工輸入

作者ID

AuthorID

int

必須輸入

人工輸入

價格

Price

Decimal(18,2)

必須輸入

人工輸入

出版日期

PublishDate

datetime

必須輸入

人工輸入

評級

Rating

nvarchar(5)

非必須輸入

人工輸入

三、創建WCF服務端項目結構

  • BookMgr.Contracts一個類庫項目,定義服務協定(Service Contract),引用System.ServiceMode程式集,見下圖。

 

  • BookMgr.Services一個類庫項目,提供對WCF服務的實現。定義在該項目中的所有WCF服務實現了定義在Contracts中相應的服務協定,所以Services具有對Contracts項目的引用。見下圖1,圖2。

 

                     圖1

  圖2

  • BookMgr.Hosting一個控制台(Console)應用,實現對定義在Services項目中的服務的寄宿,該項目須要同時引用Contracts和Services兩個項目和System.ServiceMode程式集。見下圖1,圖2。

 

 圖1

圖2

  • BookMgr.Common:解決方案中公共使用的類。見下圖。

 

  • BookMgr.Model一個對象實體項目,實現對資料庫中的表結構進行實體對象構建。通過EF 6來實現。見下圖。

 

 

  • 最終的項目結構圖如下。

 

四、創建BookMgr.Contracts項目代碼

1)在項目中創建一個 IBookService介面文件與SQLError文件。見下圖。

 

2)在BookMgr.Contracts中創建一個表示Fault異常的類SQLError.cs。代碼如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;

using System.Text;
using System.Threading.Tasks; 

namespace BookMgr.Contracts
{
    [DataContract]
    public class SQLError
    {
        private string _operation;
        private string _errorMessage;
        public SQLError(string operation, string errorMessage)

        {
            this._operation = operation;
            this._errorMessage = errorMessage;
        }

        [DataMember]
        public string Operation
        {
            get { return _operation; }
            set { _operation = value; }
        } 

        [DataMember]
        public string ErrorMessage
        {
            get { return _errorMessage; }
            set { _errorMessage = value; }
        }

    }
}

 

3)在BookMgr.Contracts中IBookService.cs介面文件。並分別創建增、刪、改、查、”Add”、“Edit”、“Delete”、“Get,Search”五個方法,分別對應五個功能的服務應用程式WCF服務應用程式。我在“Edit”方法中添加了一個自定義異常返回的特性。具體代碼如下。

 

using System;
using System.Collections.Generic;

using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace BookMgr.Contracts
{

    public interface IBookService
{

  [OperationContract]
         string Add(string bookInfo);

  [OperationContract]
        [FaultContract(typeof(SQLError))]
        string Edit(string bookInfo);

  [OperationContract]
        string Get(string bookId);

  [OperationContract] 
        string Delete(string bookInfo);

  [OperationContract]
        string Search(string Category, string searchString); 

    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 閑言碎語 近期比較忙,但還是想寫點什麼,就分享一些基礎的知識給大家看吧,希望能幫助一些linq新手,如果有其它疑問,可以加我QQ,進行交流探討,謝謝。 開門見山 讀這篇文章之前,我先說下,每一種搜索結果集,我都以三種方式變現出來,為啦更好的理解,希望不要嫌我啰嗦。 1.簡單的linq語法 2.帶wh ...
  • 1)關於特性過濾器 這個我們經常用到,一般用在捕捉異常還有許可權控制等方面,這個用著比較方便,但是這個確隱藏著一個坑,就是呢,特性過濾器會在被第一次訪問的時候創建一次,僅僅會被創建一次,然後就被aspnet緩存下來,之後就是取緩存了。 所以說如果我們要定義特性類的話,必須要註意一點就是裡面不能包含狀態 ...
  • 今天在寫東西的時候,發現常用的代碼段里沒有RoutedEvent的,因此,寫了一個代碼段,方便以後使用,順便記錄一下,如何做代碼段。 1、在項目中新建一個XML文件,將擴展名修改為snippet。 2、打開文件,然後右鍵--插入代碼段--snippet 3、出現預設的代碼段實例,修改不同的位置 4、 ...
  • SqliteSqlSugar 3.X API 作為支持.NET CORE 為數不多的ORM之一,除了具有優越的性能外,還擁有強大的功能,不只是滿足你的增,刪,查和改。實質上擁有更多你想像不到的功能,當你需要實現某個功能時會發現有這個功能太棒了。 因為每個版本的貼子API都基本一致,所以我也說一些別的 ...
  • 文檔目錄 本節內容: IApplicationService 介面 ApplicationService 類 CrudAppService 和 AsyncCrudAppService 類 簡單的CRUD應用服務示例 定製CRUD應用服務 獲取列表 創建和更新 其它 工作單元 一個應用服務生命周期 簡 ...
  • 之前看過Dapper(使用到了Emit), CYQ.Data(另一種思路,沒有使用Emit)類的框架之後, 也想自己做一個小框架玩一下, 不過此時能力太過欠缺, 做不了Cyq.Data或者PDF.Net此類的框架, 所以開始了學習之路. 先制定一個能達到的小目標吧, 從Emit開始. 一、使用場景 ...
  • 以下方法均是個人,僅供參考 //添加一個FileHelper的依賴註入(依賴註入的實現類一定要寫構造方法) //該方法是單例模式 在startup中加入 新建一個UploadController 專門處理上傳 以上方法僅供參考 ...
  • 需要用到的Nuget包 "MailKit": "1.8.1", 方法 以上的這個方法可以發Html的文本並附帶附件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...