1
.設定maxtransferwindowsize
wcf中的可靠會話使用傳輸視窗儲存客戶端和服務上的訊息。可配置屬性
maxtransfer windowsize
指示傳輸視窗可以儲存多少條訊息。
在傳送方,指示在等待確認訊息時傳輸視窗可以儲存多少條訊息,在接收方,則指示為服務緩衝多少條訊息。
選擇合適的大小可影響使用網路的效率及執行服務的最佳容量。下面將詳細介紹選擇此屬性的值時要考慮的事宜及值的影響。
預設傳輸視窗大小是8條訊息。 2
.有效使用網路
此處的「網路」一詞對應於在客戶端(傳送方)和服務(接收方)之間用做通訊基礎的任何事物。包括傳輸連線及中間的任何中介或者網橋,包括soap路由器或http**/防火牆。
有效使用網路可確保充分利用網路容量。每秒通過網路傳輸的資料量(稱為「資料速率」)及從傳送方到接收方傳輸資料所用的時間(稱為「延遲」)都會影響利用網路的有效性。
在傳送方,屬性maxtransferwindowsize指示在等待確認訊息時,其傳輸視窗可以儲存多少條訊息。因此,如果網路延遲時間很長,為確保及時響應傳送者和對網路的有效利用,應增加傳輸視窗大小。
例如,即使傳送方滿足資料速率,如果傳送方和接收方之間存在多個中介或者中介或網路存在損失,則延遲時間會很長。因此,在傳送方接收要在網路上傳送的新訊息之前,必須在其傳輸視窗中等待訊息的確認資訊。具有高延遲的緩衝區越小,網路利用率就越低。另一方面,傳輸視窗大小過高可能會影響服務,原因是服務可能需要滿足客戶端的高傳送速率。 3
.滿負荷執行服務
為最大程度地有效使用網路,理想情況是服務也按最佳容量執行。接收方的傳輸視窗大小屬性指示接收方可以緩衝多少條訊息。此訊息緩衝不僅幫助網路進行流控制,還可讓服務滿負荷執行。例如,如果緩衝區是1,而且訊息到達的速度超過了服務可以處理的速度,則網路可能會丟棄一些訊息,並可能浪費或閒置網路容量。
使用緩衝區可提高服務的可用性,因為服務可以在處理以前接收到的訊息的同時併發接收和緩衝訊息。
建議在傳送方和接收方使用相同的maxtransferwindowsize。 4
.啟用流控制
流控制是確保傳送方和接收方保持步調一致的機制,也就是說,使用和處理訊息的速度與產生訊息的速度一樣快。客戶端和服務端的傳輸視窗大小可確保傳送方和接收方在乙個合理的同步視窗中。
當在wcf客戶端和wcf服務之間使用可靠會話時,強烈建議將
flowcontrolenabled
屬性設定true。 5
.設定maxpendingchannels
當編寫乙個允許從不同的客戶端啟用可靠會話通訊的服務時,可能會有許多客戶端同時建立與該服務的可靠會話。在這些情況下,服務的響應取決於maxpendingchannels屬性。
當傳送方建立到接收方的可靠會話通道時,傳送方和接收方之間的握手將建立可靠會話。建立可靠會話之後,該通道會放入到掛起的通道佇列中以供服務端接收。此maxpendingchannels屬性指示有多少個通道可以處於此狀態。
服務端有可能會處於一種無法接收更多通道的狀態。如果佇列已滿,則會拒絕建立可靠會話的嘗試,客戶端必須重試。
佇列中掛起的通道也可能會在佇列中保持很長時間。此外,可能會出現可靠會話的非活動超時,從而導致通道轉換到錯誤狀態。
因此,在編寫同時服務於多個客戶端的服務時,應設定乙個適合需要的值。為maxpendingchannels屬性設定過高的值會影響工作集。
maxpendingchannels
的預設值為4。 6
.可靠會話和宿主
在為使用可靠會話服務提供web宿主時,應該記住下面的重要注意事項。
使用雙工http通道(例如使用wsdualhttpbinding)的可靠會話會要求多於預設的每個客戶端2個http連線的連線數。這意味著雙工可靠會話會在每個方向上要求2個連線,因為併發應用程式和協議訊息可能會在任意給定時間在每個方向上進行傳輸。這意味著,在某些特定的條件下,根據訊息交換服務模式的不同,使用雙工http和可靠會話的web承載服務可能會出現死鎖。若要增加每個客戶端允許的http連線數,請將下列**新增到相關配置檔案中(例如,相關服務的web.config)。其中的「xx」是需要的連線數。
本文節選自《wcf全面解析(上下冊)》一書
蔣金楠著
圖書詳細資訊:
web應用最佳實踐 會話管理 賬號登出
come from tt安全 軟體開發安全 應用軟體開發最佳實踐 techtarget中國原創 問 從安全的角度,你如何看待web應用程式開發中的帳號登出超時設定 快取以及其他最佳實踐的準則?答 web應用程式必須通過建立會話來記錄使用者的請求,帳號的登出功能是活躍會話管理的乙個重要方面。你的應用程...
最佳實踐 Flutter 最佳實踐
最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高 質量 可讀性 可維護性和健壯性都非常重要。讓我們探索一些設計和開發flutter應用程式的最佳實踐。class enum typedef和extension應採用駝峰命名uppercamelcase規則。class mainscree...
JUnit最佳實踐
junit最佳實踐 cherami 轉貼 參與分 20053,專家分 4960 發表 2003 9 16 下午7 57 版本 1.0 閱讀 3899次 martin fowler說過 當你試圖列印輸出一些資訊或除錯乙個表示式時,寫一些測試 來替代那些傳統的方法。一開始,你會發現你總是要建立一些新的f...