WCF學習之旅——第一個WCF示例(一)

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

最近需要用到WCF,所以對WCF進行瞭解。在實踐中學習新知識是最快的,接下來先做了一個簡單的WCF服用應用示例。 本文的WCF服務應用功能很簡單,卻涵蓋了一個完整WCF應用的基本結構。希望本文能對那些準備開始學習WCF的初學者提供一些幫助。 在這個例子中,我將實現一個簡單的書籍數據查詢功能(Book...


      最近需要用到WCF,所以對WCF進行瞭解。在實踐中學習新知識是最快的,接下來先做了一個簡單的WCF服用應用示例。

      本文的WCF服務應用功能很簡單,卻涵蓋了一個完整WCF應用的基本結構。希望本文能對那些準備開始學習WCF的初學者提供一些幫助。

      在這個例子中,我將實現一個簡單的書籍數據查詢功能(BookService),即根據書籍ID去查詢對應書籍的信息,並顯示出來。和傳統的分散式通信框架一樣,WCF本質上提供一個跨進程、跨機器、跨網路的服務調用。在本例中,客戶端和WCF應用服務通過運行在同一臺機器上的不同進程模擬。如下圖。

 

 WCF應用服務運行環境

      WCF應用服務不能單獨存在,無法獨立運行,WCF應用服務需要寄宿於一個正在運行中的進程之內。我們把承載WCF應用服務的進程稱為宿主,為WCF應用服務指定宿主的過程稱為服務寄宿 (Service Hosting)。在我們的WCF應用服務程式中,通過自我寄宿(Self-Hosting)的方式創建一個控制台應用作為服務的宿主 (寄宿進程為Hosting.exe)。客戶端通過一個WindowsFrom應用程式(進程為WinClient.exe)去訪問WCF應用服務實現數據查詢功能。接下來,我們就一步一步來學習如何創建這樣的一個WCF應用。

第一步:創建SCF.WcfService解決方案

      通過Visual Studio 2015創建一個名為“SCF.WcfService”空白的解決方案,添加如下五個項目。項目的類型、承載的功能和相互引用關係如下,整個項目在Visual Studio 2015中的結構如下所示。

 

SCF.WcfService的項目結構

  • SCF.WcfService一個類庫項目,提供對WCF服務的實現。引用關係見下圖。

 

  • Hosting一個控制台(Console)應用,實現對定義在SCF.WcfServices項目中的服務的寄宿。引用關係見下圖。

 

  • SCF.Model一個對象實體項目,實現對資料庫中的表結構進行實體對象構建。
  • WinClient一個控制台應用模擬服務的客戶端,該項目引用System.ServiceMode程式集。引用關係見下圖。

 

  • SCF.Common:SCF. WcfService解決方案中公共使用的類

 

第二步:創建WCF服務協定

       WCF採用基於介面(MSDN上翻譯為:服務協定)的交互方式實現了服務功能,以及客戶端和服務端之間的松耦合。WCF包含五種類型的協定:服務協定、操作協定、消息協定、錯誤協定和數據協定。

       從功能上講,服務協定將多個相關的操作聯繫在一起,組成單個功能單元。協定可以定義服務級設置,如服務的命名空間、對應的回調協定以及其他此類設置,以及各種操作。

      從消息交換的角度來講,服務協定則定義了基於服務調用的消息交換過程中, 請求消息和回覆消息的結構,以及採用的消息交換模式。

      從使用編程語言的角度來講,協定是通過所選的編程語言創建一個介面,然後將 ServiceContractAttribute 屬性應用於該介面。通過實現該介面,可生成實際的服務代碼。

      我們通過介面的形式定義服務協定。通過下麵的代碼,將介面IBookService定義成服務協定。WCF廣泛採用基於自定義特性(Custom Attribtue)的聲明式編程模式,我們通過在介面上應用System.ServiceModel.ServiceContractAttribute特性將一個介面定義成服務協定。在應用ServiceContractAttribute特性的同時,還可以指定服務協定的名稱和命名空間。

        通過應用ServiceContractAttribute特性將介面定義成服務協定之後,介面的方法成員並不能自動成為服務的操作。在此方面,WCF採用的是顯式選擇(Explicit Opt-in)的策略:我們須要在相應的操作方法上面顯式地應用OperationContractAttribute特性。

         在SCF.WcfService項目中添加一個IBookService.cs文件,具體代碼如下。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

 

namespace SCF.WcfService

{

    // 註意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的介面名“IBookService”。

    [ServiceContract]

    public interface IBookService

    {

         [OperationContract]

        string GetBook(string Id);

 

      }

}

 

第三步:實現WCF服務協定

      當服務協定成功創建時,我們需要通過實現服務協定來創建具體的WCF服務應用。在SCF.WcfServices項目中添加一個BookService.cs文件,此文件用來實現服務協定介面IBookService,實現所有的服務操作。BookService.cs中的代碼如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

using System.Data.Entity;

using SCF.Model;

using SCF.Common;

 

namespace SCF.WcfService

{

    // 註意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼、svc 和配置文件中的類名“BookService”。

    // 註意: 為了啟動 WCF 測試客戶端以測試此服務,請在解決方案資源管理器中選擇 BookService.svc 或 BookService.svc.cs,然後開始調試。

    public class BookService : IBookService

    {

     

     

 

        public string GetBook(string Id)

        {

 

            int bookId = Convert.ToInt32(Id);

            Books book= SetBook(bookId);

            string xml=XMLHelper.ToXML<Books>(book);

            return xml;

           

        }

 

        public Books SetBook(int Id)

        {

            Books book = new Books();

            book.BookID = Id;

            book.AuthorID = 1;

            book.Category = "IBM";

            book.Price = 9.99M;

            book.Numberofcopies = 22;

            book.Name = "DB 2";

            book.PublishDate = new DateTime(1986, 2, 23);

            return book;

        }

    }

}

 


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

-Advertisement-
Play Games
更多相關文章
  • 集合(collection)提供了一種結構化組織任意對象的方式,從廣義的概念上講,數組、枚舉和結構等組合都是集合的一種表現,其內部的元素組織方式也都與集合的定義非常類似。但在C#中,集合這一專有名詞特指System.Collections命名空間下的各種子類,數組、枚舉和結構都不是System.Co
  • 根據大牛的方案修改的自己使用的Actor!
  • 關於C# webform 項目發佈 註意:aspx頁面無任何代碼,每個頁面都以dll形式發佈帶bin文件夾里 具體操作方法如下圖:
  • Line 在兩個坐標點之間畫一條直線,通過四個屬性設置它的起始和結束 <Line Stroke="Blue" StrokeThickness="3" X1="20" Y1="20" X2="300" Y2="20"></Line> 如果線條是畫在Canvas畫布中,那麼Canvas的附加屬性Top和
  • 經過上面的折騰,我成功用批處理編譯 .NET Framework 4.5.2 項目後, 我並未滿足, 我想要更方便的, 無須安裝那麼多操蛋的東西, 只需要有運行時環境就可以了, 行不行? 答案當然是可以的, 那便是近年漸火的 roslyn 開源項目.
  • 程式效果 最終得到程式的運行效果如圖。拖動Slider可以使按鈕的背景色出現相應變化。 需求分析和架構設計 如果是你,接到了這樣的一個程式設計要求,會怎樣思考?第一步當然是需求分析啦。這個程式相對簡單,需要分析的主要是各個控制項之間的數據聯繫。這主要體現在Slider, Textbox和Button間
  • 編寫WinForm程式時,都會碰到一個問題。就是WinForm視窗在不同解析度下的大小問題。舉例說明,你編寫的WinForm視窗在1024×768下是合適、勻稱的。不過,如果用戶的電腦的解析度為1400×900時,你的WinForm視窗就顯得偏小,其中的字體和控制項都顯得偏小。如果用戶的解析度為64
  • 用vs2010開發項目鏈接伺服器時出現 之前是因為許可權問題,每次打開項目文件時 ,都要先直接進伺服器然後打開項目。 用了兩天,又不行了。就這個問題已經問了了老大不下3次了。 其實很是不想再麻煩他老人家的啦,在網上找的解決方案說是這樣設置 菜單欄==》調試==》選項和設置==》源代碼管理==》當前源代
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...