標籤:style blog http color os strong io 資料
本文著作權歸mephisto和部落格園共有,歡迎轉載,但須保留此段聲明,並給出原文連結,謝謝合作。
閱讀目錄
- 介紹
- 綁定
- 行為
- 普通應用和SilverLight應用區別
本文著作權歸mephisto和部落格園共有,歡迎轉載,但須保留此段聲明,並給出原文連結,謝謝合作。
介紹
WCF是構建和運行互聯絡統的一系列技術的總稱,它是建立在Web Service架構上的一個全新的通訊平台。我們可以把它看成是.NET平台上的新一代的Web Service。WCF的綁定和行為可以對提供的服務提供不同的通訊方式支援和其他方面的約束。
綁定一:通道與通道棧
通道棧裡可以定義很多通道,如:BasicHttpBinding,WSHttpBinding,NetTcpBinding 等。我們就從最常用到的BasicHttpBinding來進行分析。
BasicHttpBinding類繼承於Binding。我們對主要用到的限定做下描述:
Binding類中有OpenTimeout,SendTimeout,ReceiveTimeout,CloseTimeout4個時間的限定。服務宿主端和用戶端配置都起作用。
舉個情境,用戶端調用服務這個過程:首先是開啟服務通訊串連,這個過程可能會涉及到認證等過程,假如超過OpenTimeout的時間還沒開啟,就會觸發對應的異常;其次是發送服務調用請求,然後服務宿主端收到請求,處理完,然後將結果反饋到用戶端,這整個過程都輸入用戶端的發送過程,也就是這整個過程超過SendTimeout了,就會觸發對應的異常,最後是關閉服務通訊串連,同開啟服務通訊串連。
BasicHttpBinding類中有MaxBufferPoolSize(524288),MaxBufferSize(65536),MaxReceivedMessageSize(65536),TransferMode,ReaderQuotas等這些擴充限制。
其中MaxBufferSize和MaxBufferPoolSize是一對屬性,當TransferMode為Buffered的時候,MaxBufferSize必須和MaxBufferPoolSize一致。
用戶端這些屬性的配置也應該和服務宿主的配置一致,當然也可以不一致,比如服務宿主這邊採用TransferMode為Buffered,用戶端採用TransferMode為Streamed。
當我們定義的Binding的Name為空白,則這個Binding為預設的Binding。
二:行為:
本文著作權歸mephisto和部落格園共有,歡迎轉載,但須保留此段聲明,並給出原文連結,謝謝合作。
行為分為ServiceBehaviors,EndpointBehaviors。服務行為可以定義服務的一些行為模式,比如中繼資料是否公開,是否開始服務調試,資料序列化對象個數限制等。
在普通的調用下,用戶端也有EndpointBehaviors配置項,但是在SilverLight中卻沒有,那麼很多行為在SilverLight該怎麼進行配置列?等下在表。
ServiceBehaviors很重要的兩個配置項就是serviceMetadata和dataContractSerializer。serviceMetadata的httpGetEnabled項可以控制中繼資料是否被公開。dataContractSerializer的maxItemsInObjectGraph項可以控制服務反饋的結果資料的可序列化對象個數(這裡不是多少個執行個體,而是所有屬性的加合),maxItemsInObjectGraph不僅可以放寬對某些巨量資料服務調用的限制,也可以對DDos攻擊的限制。
普通應用和SilverLight應用區別一:通道限制
普通應用和SilverLight應用都可以在用戶端進行對應的通道限制,只不過SliverLight的transferMode只有Buffered,StreamedResponse兩種,readerQuotas配置項也是沒有的。
二:行為限制
很多普通應用和SilverLight應用需要擷取比較大的資料,資料中的對象多了,很可能會觸發maxItemsInObjectGraph超出的異常,這裡兩者的配置區別也很大。
首先:服務宿主端的maxItemsInObjectGraph配置肯定是得有。
其次:普通應用用戶端是要配置對應的endpointBehaviors 中的maxItemsInObjectGraph。
然而:SilverLight應用用戶端則沒有endpointBehaviors這個配置項,那麼我們應該怎麼通過配置來處理列,找了很多資料,自己也實驗了很多次,其實不用管這個行為配置。只要服務端配置了就可以了。
服務端:
本文著作權歸mephisto和部落格園共有,歡迎轉載,但須保留此段聲明,並給出原文連結,謝謝合作。
普通用戶端:
本文著作權歸mephisto和部落格園共有,歡迎轉載,但須保留此段聲明,並給出原文連結,謝謝合作。