天天看點

WCF綁定和行為在普通應用和SilverLight應用一些對比

大家對WCF了解不少了,但是對其中的某些細節,比如普通應用和SilverLight應用的配置差別和限制可能了解不多。下面就這塊内容表述一下。

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段聲明,并給出原文連結,謝謝合作。

閱讀目錄

  • 介紹
  • 綁定
  • 普通應用和SilverLight應用差別

  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。

如圖:

WCF綁定和行為在普通應用和SilverLight應用一些對比

二:行為:

  行為分為ServiceBehaviors,EndpointBehaviors。服務行為可以定義服務的一些行為模式,比如中繼資料是否公開,是否開始服務調試,資料序列化對象個數限制等。

  在普通的調用下,用戶端也有EndpointBehaviors配置項,但是在SilverLight中卻沒有,那麼很多行為在SilverLight該怎麼進行配置列?等下在表。

  ServiceBehaviors很重要的兩個配置項就是serviceMetadata和dataContractSerializer。serviceMetadata的httpGetEnabled項可以控制中繼資料是否被公開。dataContractSerializer的maxItemsInObjectGraph項可以控制服務回報的結果資料的可序列化對象個數(這裡不是多少個執行個體,而是所有屬性的加合),maxItemsInObjectGraph不僅可以放寬對某些大資料服務調用的限制,也可以對DDos攻擊的限制。

  如圖:

WCF綁定和行為在普通應用和SilverLight應用一些對比

一:信道限制

  普通應用和SilverLight應用都可以在用戶端進行對應的信道限制,隻不過SliverLight的transferMode隻有Buffered,StreamedResponse兩種,readerQuotas配置項也是沒有的。

二:行為限制

  很多普通應用和SilverLight應用需要擷取比較大的資料,資料中的對象多了,很可能會觸發maxItemsInObjectGraph超出的異常,這裡兩者的配置差別也很大。

  首先:服務宿主端的maxItemsInObjectGraph配置肯定是得有。

  其次:普通應用用戶端是要配置對應的endpointBehaviors 中的maxItemsInObjectGraph。

  然而:SilverLight應用用戶端則沒有endpointBehaviors這個配置項,那麼我們應該怎麼通過配置來處理列,找了很多資料,自己也試驗了很多次,其實不用管這個行為配置。隻要服務端配置了就可以了。

服務端:

WCF綁定和行為在普通應用和SilverLight應用一些對比

普通用戶端:

WCF綁定和行為在普通應用和SilverLight應用一些對比
WCF綁定和行為在普通應用和SilverLight應用一些對比

博文作者:mephisto

博文出處:http://www.cnblogs.com/mephisto

本文版權歸作者和部落格園共有,歡迎轉載,但須保留此段聲明,并給出原文連結,謝謝合作!

如果閱讀了本文章,覺得有幫助,您可以選擇捐助我:

WCF綁定和行為在普通應用和SilverLight應用一些對比

繼續閱讀