天天看點

化零為整WCF系列文章索引

<a href="http://down.51cto.com/data/100781" target="_blank">[源碼下載下傳]</a>

化零為整WCF系列文章索引

介紹

WCF (Windows Communication Foundation) :契約, 綁定, 宿主, 異常處理, 異步調用, 雙向通訊, MTOM, 流資料傳輸, 序列化, 執行個體模型, 會話狀态, 并發, 限流, 事務, 安全, 可靠性消息, 消息隊列, WCF建立REST, AJAX調用WCF

廢話不多說,俗也不能免,我也從Hello開始。

服務契約(ServiceContract),操作契約(OperationContract),資料契約(DataContract),服務已知類型(ServiceKnownType),資料成員(DataMember)。

Http以basicHttpBinding為例,Tcp以netTcpBinding為例。

一般Exception的處理,FaultException和FaultException的抛出和處理,使用IErrorHandler處理異常。

WCF服務可以宿主在IIS, Application, WAS, WindowsService。本文以宿主在WindowsService為例。

通過操作契約的IsOneWay參數實作異步調用,基于Http, TCP, Named Pipe, MSMQ的雙向通訊。

MTOM(Message Transmission Optimization Mechanism) - 消息傳輸優化機制。本文以web方式上傳大檔案為例。

使用流資料傳輸檔案,減少記憶體開銷。

本文分别以DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter為例。

ServiceBehavior 

InstanceContextMode.PerCall - 新的 System.ServiceModel.InstanceContext 對象在每次調用前建立,在調用後回收。 

InstanceContextMode.PerSession - 為每個會話建立一個新的 System.ServiceModel.InstanceContext 對象。 

InstanceContextMode.Single - 隻有一個 System.ServiceModel.InstanceContext 對象用于所有傳入呼叫,并且在調用後不回收。如果服務對象不存在,則建立一個。

ServiceContract 

SessionMode.Allowed - 指定當傳入綁定支援會話時,協定也支援會話(預設值) 

SessionMode.Required - 指定協定需要會話綁定。如果綁定并未配置為支援會話,則将引發異常 

SessionMode.NotAllowed - 指定協定永不支援啟動會話的綁定 

OperationContract 

IsInitiating - 擷取或設定一個值,該值訓示方法是否實作可在伺服器上啟動會話(如果存在會話)的操作。 

IsTerminating - 擷取或設定一個值,該值訓示服務操作在發送答複消息(如果存在)後,是否會導緻伺服器關閉會話。

ConcurrencyMode.Single:單線程并發模式。系統自動加鎖,無并發問題 

ConcurrencyMode.Reentrant:可重入的單線程并發模式。有可重入(回調)操作時,此模式才會生效,從回調傳回的線程會進入隊列尾部排隊 

ConcurrencyMode.Multiple:多線程并發模式。系統不會自動加鎖,有并發問題 

WCF(Windows Communication Foundation) - 限流(Throttle): 

maxConcurrentCalls - 服務中同時存在的最大活動消息數,預設值為 16 

maxConcurrentInstances - 服務中同時存在的最大服務執行個體數,預設值為 Int32.MaxValue 

maxConcurrentSessions - 服務中同時存在的最大會話數,預設值為 10

以ConcurrencyMode.Multiple并發模式及InstanceContextMode.Single執行個體模型為例(此時有并發問題),介紹如何做并發控制,即各種鎖的使用(Mutex, Semaphore, Monitor, Lock, ThreadPool, Interlocked, ReaderWriterLock)

對契約方法使用TransactionFlowAttribute聲明(設定TransactionFlowOption參數),以指定服務操作的事務流政策 

對服務方法是用OperationBehaviorAttribute聲明(設定TransactionScopeRequired參數),以指定方法是否在事務範圍(TransactionScope)内執行 

配置host和client的binding節點的transactionFlow屬性,以指定綁定是否支援流事務

通過重試的方法來保證消息的可靠傳遞,預設為8次 

當配置了“有序傳遞”的時候,用戶端和服務端會開辟緩沖區,服務端緩沖區在接到所有用戶端發來的消息後,按照用戶端調用的順序排序各個消息,然後有序地調用服務端

netMsmqBinding的binding屬性配置如下: 

ExactlyOnce - 確定消息隻被投遞一次 

Durable - 消息是否需要持久化 

TimeToLive - 消息過期并且從原有的隊列移動到死信隊列的時間 

ReceiveRetryCount - 将消息傳輸到重試隊列前嘗試發送該消息的最大次數 

MaxRetryCycles - 重試最大周期數 

RetryCycleDelay - 重試周期之間的延遲 

ReceiveErrorHandling - 指定如何處理錯誤的消息 

DeadLetterQueue - 指定所使用的死信隊列的類型 

CustomDeadLetterQueue - 本地自定義死信隊列的URI  

本文以使用者名和密碼做驗證,通過X.509證書做加密為例

使用WCF建立REST服務,使用asp.net ajax調用WCF服務 

System.ServiceModel.Activation.WebServiceHostFactory - 用于承載使用 WCF Web 程式設計模型的服務 

System.ServiceModel.Activation.WebScriptServiceHostFactory - 能夠向服務中自動添加 ASP.NET AJAX 終結點而無需進行配置

OK

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/343999,如需轉載請自行聯系原作者

繼續閱讀