WCF是.NET提供的具有高度靈活性的通訊管理框架。web
wcf使用OData(開放式數據協議)建立數據服務,將數據經過URI公開,容許使用REST(具象狀態傳輸)來訪問及更改數據,即標準HTTP動詞GET、PUT、POST和DELETE操做。OData定義了Atom、JSON、XML格式等發佈協議。數據庫
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異步
從DataService<T>類繼承,T爲實體容器
DataServiceConfiguration 配置對資源和服務操做的訪問。
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對象。
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服務的集成。
1.SOAP 簡單對象訪問協議
2.WSDL Web服務描述語言
3.REST 表明性狀態傳輸
4.JSON JavaScript對象標記
1.繼承自System.ServiceModel.ServiceHost
2. 實例.Open() 啓動監聽器信道
3.實例.Close() 關閉服務
4. 用WCF Service Configuration Editor 工具編輯 WCF配置文件
1.添加一個服務引用(服務使用了mexHttpBinding 綁定MEX端點)
2.添加System.Runtime.Serialization、System.ServiceModel 程序集引用,和綁定信息與端點的配置文件
3.生成代理類,和實體類,該實體類包含[DataMember]標註的元素
可以使用Service Configuration Editor工具配置。用Service Trace Viewer(svctraceviewer.exe)工具查看跟蹤文件。
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]
.TransactionAutoCompleteOnSessionClose 會話類型 .TransactionIsolationLevel 事務隔離級別 .ReleaseServiceInstanceOnTransactionComplete 會話完成時 .AutomaticSessionShutdown 會話關閉 .InstanceContexMode 對象狀態 .ConcurrencyMode 併發 .UseSynchronizationContext 窗口線程 .IncludeExceptionDetailInFaults 異常處理 .MaxItemsInObjectGraph 序列化對象的數目 .ValidateMustUnderstand 理解標題
.AutoDisposeParameters 參數自動釋放 .Impersonation 調用者身份運行 .ReleaseInstanceMode 生命週期 .TransactionScopeRequired 事務 .TransactionAutoComplete 自動完成事務
var binding = new WSHttpBinding();
var address = new EndpointAddress(連接);
var factory = new ChannelFactory<I服務>(binding, address);
I服務 channel = factory.CreateChannel();
factory.Close();
var client = new XXServiceClient();
client.RegisterForCourse(…);
client.Close();
必須在客戶端中實現指定協定接口。
服務器端:
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){}}
1.[FaultContract] 標註操做關聯的異常數據類
2.拋出FaultException<異常數據類>
綁定描述了服務的通訊方式。包括:傳輸協議、安全性、編碼格式、事務流、可靠性、形狀變化、傳輸升級。
預約義綁定:
按功能分:
消息隊列是通訊任務的重要輔助工具。System.Messaging 空間封裝了windows操做系統的消息隊列讀寫功能。