WCF入門教程1——WCF簡要介紹

来源:http://www.cnblogs.com/jiekzou/archive/2016/03/27/5325310.html
-Advertisement-
Play Games

什麼是WCF Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程式框架,可以翻譯為Windows 通訊開發平臺。 整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有Http和 ...


什麼是WCF

Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程式框架,可以翻譯為Windows 通訊開發平臺。

整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有HttpFtp的相關技術。WCF是對這些技術的統一

根據MSDN上的定義:WCF為.NetFramework 提供了一個基礎,使其能夠編寫代碼,以在組件、應用程式、系統之間進行通信。WCF的設計遵循的是面向服務的原則。服務是指可以通過消息與之進行交互的一段代碼。服務是被動的。它們等待傳入消息之後才開始工作。客戶端是發起者,客戶端將消息發送給服務來請求工作。

是Windows平臺上開發分散式應用最佳的實踐方式。

 

假定我們要為一家汽車租賃公司開發一個新的應用程式,用於租車預約服務。該租車預約服務會被多個應用程式訪問,包括:呼叫中心(Call Center),基於J2EE的租車預約服務以及合作伙伴的應用程式(Partner Application)

使用WCF,該解決方案的實現就容易多了。如圖中所示,WCF可用於前述所有情況。因此,租車預定應用程式使用這一種技術就可以實現其所有應用程式間的通信。
WCF可使用Web服務進行通信,因此與同樣支持SOAP的其他平臺(例如基於J2EE的主流應用程式伺服器)間的互操作性就變得簡單明瞭。
還可以對WCF進行配置和擴展,以便與使用並非基於SOAP的消息的Web服務進行通信。
性能是大多數業務中至關重要的考慮事項。開發WCF的目標就是要使之成為Microsoft所開發的速度最快的分散式應用程式平臺之一。
WCF是提供統一的,可用於建立安全、可靠的面向服務的應用的高效開發平臺。
WCF具有如下的優勢:   
   1、統一性
   2、互操作性
   3、安全與可信賴
   4、相容性

理解面向服務(Service-Oriented-Architecture)

SOA是指為瞭解決在Internet環境下業務集成的需要,通過連接能完成特定任務的獨立功能實體實現的一種軟體系統架構。SOA是一個組件模型,它將應用程式的不同功能單元(稱為服務)通過這些服務之間定義良好的介面和契約聯繫起來。
SOA指出當前系統應該足夠靈活,從而允許在不打亂當前成功運行的體繫結構和基礎結構的前提下,改動已有的體繫結構。
SOA原則:

  • 邊界清晰
  • 服務自治
  • 相容性基於策略
  • 共用模式(schma)和契約

WCF體系架構簡介

契約與說明

契約定義消息系統的各個方面。

數據契約:服務中的參數;

消息契約:使用SOAP協議特定的消息部分;

服務契約:服務中的方法;

策略與綁定:策略設置安全或其他條件,綁定指定傳輸方式與編碼。


服務運行時

服務運行期間的行為控制

限制行為:控制處理的消息數;

錯誤行為:出現內部錯誤時所處理的操作;

元數據行為:是否向外提供元數據及元數據的提供方式;

實例行為:可運行的服務實例數目;

事務行為:處理事務;

調度行為:控制WCF處理消息的方式;


消息傳遞

消息傳遞層:說明數據的交換格式和傳輸模式。

消息傳遞層由通道(通道)組成,通道是對消息進行處理的組件,負責以一致的方式對消息進行整理和傳送。通道用於傳輸層、協議層、及消息獲取。各層次的通道組成了通道棧。

通道對消息和消息頭進行操作,服務運行時對消息正文進行操作。

兩種類型:傳輸通道 與 協議通道。

傳輸通道:讀取和寫入來自網路的消息,傳輸通道通過編碼器將消息轉換為網路傳輸使用的位元組流,以及將位元組流轉換為消息。傳輸通道示例如:HTTP通道、命名管道、TCP、MSMQ等;

協議通道:通過讀取或寫入消息頭的方式來實現消息協議,協議通道示例如:WS-Security,WS-Reliability。


承載和激活

服務宿主: 負責WCF服務的生命周期和上下文的操作系統進程,負責啟動和停止WCF服務,並提供控制服務的基本管理功能。

WCF基礎概念介紹


契約(Contract

WCF 的基本概念是以合約(Contract)來定義雙方溝通的協議,合約必須要以介面的方式來體現,而實際的服務代碼必須要由這些合約介面派生並實現。合約分成了四種:

  數據合約 (Data Contract),訂定雙方溝通時的數據格式。服務合約 (Service Contract),訂定服務的定義。操作合約 (Operation Contract),訂定服務提供的方法。消息合約 (MessageContract),訂定在通信期間改寫消息內容的規範。一個 WCF中的合約,就如同下列代碼所示:

[csharp] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. using System;  
  2. using System.ServiceModel;  
  3. namespace Microsoft.ServiceModel.Samples{  
  4.   
  5. [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]// 服務合約  
  6. public interface ICalculator  
  7. {  
  8. [OperationContract] // 操作合約  
  9. double Add(double n1, double n2);  
  10.   
  11. [OperationContract] // 操作合約  
  12. double Subtract(double n1, double n2);  
  13.   
  14. [OperationContract] // 操作合約  
  15. double Multiply(double n1, double n2);  
  16.   
  17. [OperationContract] // 操作合約  
  18. double Divide(double n1, double n2);  
  19. }  
  20. }  

綁定 (Binding)

  由於 WCF 支持了 HTTPTCPNamed PipeMSMQPeer-To-Peer TCP等協議,而 HTTP 又分為基本 HTTP 支持 (BasicHttpBinding)以及 WS-HTTP 支持 (WsHttpBinding),而 TCP亦支持 NetTcpBindingNetPeerTcpBinding等通信方式,因此,雙方必須要統一通信的協議,並且也要在編碼以及格式上要有所一致。

  一個設置通信協議綁定的示例如下:

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3. <system.serviceModel>  
  4. <!-- 設定服務繫結的資訊 -->  
  5. <services>  
  6. <service name=" CalculatorService" >  
  7. <endpoint address="" binding="wsHttpBinding"bindingConfiguration="Binding1" contract="ICalculator"/>  
  8. </service>  
  9. </services>  
  10. <!-- 設定通訊協定繫結的資訊 -->  
  11. <bindings>  
  12. <wsHttpBinding>  
  13. <binding name="Binding1">  
  14. </binding>  
  15. </wsHttpBinding>  
  16. </bindings>  
  17. </system.serviceModel>  
  18. </configuration>  

  雖然 WCF 也可以使用 SOAP做通信格式,但它和以往的 ASP.NETXML Web Services不同,因此有部分技術文章中,會將 ASP.NET XML Web Services稱為 ASMX Service

WCF 的服務可以掛載於 Console ApplicationWindowsApplicationIIS (ASP.NET) ApplicationWindows Service以及 Windows Activation Services中,但大多都會掛在 Windows Service

主要的系統內置綁定:

系統綁定支持的功能:

各種綁定方式的性能比較:

終結點

終結點是用來發送或 接收消息(或執行這兩種操作)的構造。終結點包括一個定義消息可以發送到的目的地的位置(地址)結點,包括一個定義消息可以發送到的目的地的位置(地 址)、一個描述消息應如何發送的通信機制規範(綁定)以及對於可以在該位置發送或接收(或兩者皆可)的一組消息的定義(服務協定)該定義還描述了可以發送何種消息。

終結點的地址由EndpointAddress 類表示,該類包含一個表示服務地址的統一資源定位符(URI),大多數傳輸的地址URI 包含四個部分。
例如,
“http://www.cnblogs.com:80/jiekzou”這個URI 具有以下四個部分:
– 方案:http:
– 電腦:www.cnblogs.com
– (可選)埠:80
– 路徑:/jiekzou

元數據

所謂的“元數據”就是描述數據的數據,即描述當前服務有哪些服務契約、方法契約和數據契約以及終結點的信息。而“元數據終結點”就是向外界暴露元數據的終結點。當客戶端添加WCF服務引用的時候,會首先通過元數據取得伺服器端的契約信息、終結點信息,然後根據這些信息在客戶端創建了代理類,我們在客戶端調用WCF服務的過程實際上就是通過代理類調用WCF服務的過程。

宿主(Host):一種應用程式域和進程,服務將在該環境中運行。

WCF和Webservice的區別

1.WebService嚴格來說是行業標準,不是技術,使用XML擴展標記語言來表示數據(這個是跨語言和平臺的關鍵)。微軟的Web服務實現稱為ASP.NET Web Service.它使用Soap簡單對象訪問協議來實現分散式環境里應用程式之間的數據交互。

WSDL來實現服務介面相關的描述。此外Webservices可以註冊到UDDI中心.供其客戶查找使用。後來微軟做了ASP.NET Web Service的安全,性能,數據加密、解密,托管宿主等多方面的擴展,稱為WSE系列,這個是過度產品,最高到WSE3.0.後來就是WCF時代。

2.WCF其實一定程度上就是ASP.NET WebService,因為它支持Web Service的行業標準和核心協議,因此ASP.NET WebServiceWSE能做的事情,它幾乎都能勝任,跨平臺和語言更不是問題(數據也支持XML格式化,而且提供了自己的格式化器)。


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

-Advertisement-
Play Games
更多相關文章
  • 今天要查看伺服器和TUTK版本,看了一下資料: 新接手了幾台linux的伺服器,第一步當然是要瞭解這些伺服器的軟硬體配置.現在就寫出我這次用的一些命令. 首先當然要取得機器的IP,用戶名和密碼(呵呵,不知道就找原來的管理員要哈) 登陸之後,首先看到的就是機器的名稱,一般提示符就有了,如 [root@ ...
  • 破解的目的是將受限的個人版變為全功能的Pro版,破解後就可以使用所有功能了,界面也變成了黑色的主題。 破解網址(支持最新版的5.3.4f1): http://www.ceeger.com/forum/read.php?tid=23396&page=1 已測試破解沒有問題。 ...
  • 今天真是個鬱悶的日子,因為老師兩個星期前給我的一個任務,用遞歸演算法將Oracle資料庫中用戶信息及許可權顯示在jquery-treeView上,網上雖然有大神寫出了這類演算法,但是不貼全部代碼,真的很難跟著寫出來啊(或者本人能力有限),今天和老師爭論了一下午,老師都差點懷疑我能力有問題了,雖然我確實能力 ...
  • 一、Memcached是什麼? Memcached是一個高性能的分散式記憶體對象緩存系統,可以在記憶體中緩存數據和對象來減少讀取資料庫的次數,從而提醒性能。Memcached基於一個K/V對的hashmap。 二、Memcached的特征 1. 協議簡單:基於文本協議和二進位協議進行通信 2. 基於li ...
  • 廣州傳智博客黑馬訓練營.Net15期 7 張揚波 MVC大項目6 張揚波 MVC3 胡凌浩 HTML&JS2 基礎加強+三層 5 張揚波 企業站點(asp.net)&EF 4 江佳恆 ASP.net 1 王絢文 dotnet基礎下載地址:http://fu83.cn/thread-24-1-1.ht ...
  • 寫ASP.NET MVC程式,我們經常需要把數據從視圖(View)傳遞至部分視圖(Partial View) 或者相反。今天Insus.NET使用 ControllerBase.TempData 進行處理。 首先演示的是View至Parital View創建一個控制器,並添加一個操作TmTestA( ...
  • http://www.codeproject.com/Articles/26466/Dependency-Injection-using-Spring-NET http://stackoverflow.com/questions/29767825/spring-netnhibernate-confi ...
  • 在項目中,採用code first時建立的模型對象不能直接用於數據傳輸,需要從新根據需求建立Dto對象 為什麼需要建立Dto對象呢? 那麼在項目中需要將Model轉換成DTO,為了快速方便的轉換,可以採用Lambda Expression快速實現, 例如,建立了領域模型Book 建立DTO對象 建立 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...