編程三大核心內容之二:通訊

WCF是.NET提供的具有高度靈活性的通訊管理框架。web

image

wcf使用OData(開放式數據協議)建立數據服務,將數據經過URI公開,容許使用REST(具象狀態傳輸)來訪問及更改數據,即標準HTTP動詞GET、PUT、POST和DELETE操做。OData定義了Atom、JSON、XML格式等發佈協議。數據庫

image

〇、概述

1.定義數據模型

1.1 ADO.NET 實體框架編程

1.2 基於CLR對象的數據模型,該模型返回IQueryable<T>接口,須實現IUpdatable來實現建立、更新、刪除操做。windows

1.3 自定義數據提供程序安全

1.3.1 元數據提供程序 IDataServiceMetadataProvider服務器

1.3.2 查詢提供程序 IDataServiceQueryProvider併發

1.3.3 更新提供程序 IDataServiceUpdateProvider框架

1.3.4 分頁提供程序 IDataServicePagingProviderasp.net

1.3.5 流提供程序 IDataServiceStreamProvider異步

2.建立數據服務

從DataService<T>類繼承,T爲實體容器

3.配置數據服務

DataServiceConfiguration 配置對資源和服務操做的訪問。

4.訪問數據服務資源

4.1經過URI訪問

例:協議+命名空間+實體+鍵+屬性|關聯+/$value|?$filter=XXX

4.2 HTTP操做:HTTP GET 、HTTP POST、HTTP DELETE、HTTP PUT、HTTP MERGE

4.3 http put, post, merge請求發送實體數據的格式:Atom、JSON

4.4 客戶端庫類DataServiceContext和DataServiceQuery<T>將Atom、JSON等消息轉換爲表明實體數據的CLR對象。

5.客戶端庫類

DataServiceContext 封裝針對指定數據服務支持的操做(可保持上下文):

.Credentials 可指定發送憑據

.SendingReuest 發送請求前事件

.AddRelatedObject  添加實體,並在兩個相關實體對象之間建立新的連接

.AddLink 建立連接

.SetLink 更新連接(0..1:一、1:1)

.DeleteLink 刪除連接

.AttachLink 附加連接

.DetachLink 終止連接(*:*)

.AddObjcet 在上下問中添加項

.AttachTo 添加一個已在數據庫中的對象而無需查詢

.UpdateObject 標記已更新對象

.DeleteObject 標記已刪除對象

.SaveChanges 提交更改

DataServiceQuery<T>表示一個針對特定實體集的查詢:

.AddQueryOption (String,Object)添加一個查詢選項。

.Execute() 執行查詢,返回IEnumerable<T>源,可前置轉換爲QueryOperationResponse<T>對象

.IncludeTotalCount 實體集中實體的總數

.Expand 預加載相關實體

.LoadProperty  顯式加載相關實體

QueryOperationResponse 包含:

.Error 操做引起的錯誤

.Headers 與查詢響應關聯的HTTP響應表頭的集合

.Query 生成結果對應的DataServiceQuery<T>

.StatusCode  查詢響應的HTTP響應代碼

.TotalCount 實體集總數

.GetContinuation 返回一個DataServiceQueryContinuation<T>對象,包含下一頁結果的URI

一.特色

1.靈活的服務端支持: asp.net、windows服務、com+進程、windows窗體等。

2.編程方便:不須要共同基類。

3.信道可選:http、tcp、ipc、自定義信道。

4.安全:支持wse 3.0標準。

5.擴展性:soap注入。

6.集成性:支持dcom和asp.net web服務的集成。

2、核心服務

1.SOAP 簡單對象訪問協議

2.WSDL Web服務描述語言

3.REST 表明性狀態傳輸

4.JSON JavaScript對象標記

3、自定義服務宿主

1.繼承自System.ServiceModel.ServiceHost

2. 實例.Open() 啓動監聽器信道

3.實例.Close() 關閉服務

4. 用WCF Service Configuration Editor 工具編輯 WCF配置文件

4、客戶端

1.添加一個服務引用(服務使用了mexHttpBinding 綁定MEX端點)

2.添加System.Runtime.Serialization、System.ServiceModel 程序集引用,和綁定信息與端點的配置文件

3.生成代理類,和實體類,該實體類包含[DataMember]標註的元素

5、診斷

可以使用Service Configuration Editor工具配置。用Service Trace Viewer(svctraceviewer.exe)工具查看跟蹤文件。

6、協定

1.數據協定[DataMember] :  .Name字段名 .Order 序列化順序 .IsRequired 可選性 .EmitDefaultValue 默認值是否序列化

2.數據版本[DataContract]: .Namespace xml命名空間 (刪除字段和添加必要字段應修改命名空間來區分不一樣版本)

3.服務協定[ServiceContract]:標註服務接口 .ConfigurationName 服務配置名 .CallbackContract 雙工通訊客戶端 .Name <portType>的名字 .Namespce <portType>的名稱空間 .SessionMode 會話類型 .ProtectionLevel 保護通訊類型

4.操做協定[OperationContract]: .Action 請求連接,默認是xml名稱空間、協定名、操做名和響應類型(Response結尾)的組合 .ReplyAction 迴應連接 .AsyncPattern 異步連接 .IsInitiating 初始會話 .IsTeminating 結束會話 .IsOneWay 無響應操做 .Name 操做名 .ProtectionLevel 安全類型

5.傳輸協定:[DeliveryRequirements]、[RequireOrderedDelivery]、[QueuedDeliveryRequirements]

6.消息協定:[MessageContract]、[MessageHeader]、[MessageBodyMember]

7、實現服務

1.[ServiceBehavior]標註實現類:

.TransactionAutoCompleteOnSessionClose 會話類型 .TransactionIsolationLevel 事務隔離級別 .ReleaseServiceInstanceOnTransactionComplete 會話完成時 .AutomaticSessionShutdown 會話關閉 .InstanceContexMode 對象狀態 .ConcurrencyMode 併發 .UseSynchronizationContext 窗口線程 .IncludeExceptionDetailInFaults 異常處理 .MaxItemsInObjectGraph 序列化對象的數目 .ValidateMustUnderstand 理解標題

2.實現服務接口

3.[OperationBehavior] :

.AutoDisposeParameters 參數自動釋放 .Impersonation 調用者身份運行 .ReleaseInstanceMode 生命週期 .TransactionScopeRequired 事務 .TransactionAutoComplete 自動完成事務

8、編程實現客戶端

1.ChannelFactory類例子:

var binding = new WSHttpBinding();

var address = new EndpointAddress(連接);

var factory = new ChannelFactory<I服務>(binding, address);

I服務 channel = factory.CreateChannel();

factory.Close();

2.visual studio 添加服務引用

3.ServiceModel 元數據實用工具(Svcutil.exe) 產生代理類:

var client = new XXServiceClient();

client.RegisterForCourse(…);

client.Close();

4.雙工通訊

必須在客戶端中實現指定協定接口。

服務器端:

public interface IMyMessageCallback{

[OperationContract(IsOneWay=true)]

void OnCallback(string message);}

[ServiceContract(CallbackContract=typeof(IMyMessageCallback))]

public interface IMyMessage{

[OperationContract]

void MessageToServer(string message);}

客戶端:

class ClientCallback: IMyMessageCallback{

public void OnCallback(string message){}}

 

9、異常處理

1.[FaultContract] 標註操做關聯的異常數據類

2.拋出FaultException<異常數據類>

10、綁定

綁定描述了服務的通訊方式。包括:傳輸協議、安全性、編碼格式、事務流、可靠性、形狀變化、傳輸升級。

預約義綁定:

image

按功能分:

image

 

11、消息隊列

消息隊列是通訊任務的重要輔助工具。System.Messaging 空間封裝了windows操做系統的消息隊列讀寫功能。

image

相關文章
相關標籤/搜索