中介層用戶端應用程式

本主題討論與使用 Windows Communication Foundation (WCF) 之中介層用戶端應用程式有關的各種特定問題。

提升中介層用戶端效能

由於 WCF 提供了豐富的功能集,與往常的通訊技術 (例如,使用 ASP.NET 的 Web 服務) 相比,建立 WCF 用戶端執行個體的作業可能較為複雜。 例如,ChannelFactory<TChannel> 物件開啟時,它可以和服務建立安全工作階段,而這個程序通常會增加用戶端執行個體的啟動時間。 一般而言,這些附加功能對用戶端應用程式產生的影響不大,因為 WCF 用戶端會進行數次呼叫,然後才關閉。

不過,由於中介層用戶端應用程式可以快速建立許多 WCF 用戶端物件,因此需要更高的初始化需求。 呼叫服務時,有兩種主要方式可以提高中介層應用程式的效能:

  • 快取 WCF 用戶端物件,然後盡可能在後續的呼叫中重複使用它。

  • 建立 ChannelFactory<TChannel> 物件,然後使用這個物件來為每一個呼叫建立新的 WCF 用戶端通道物件。

使用這些方式時要考慮的問題:

  • 如果服務正在使用工作階段維護用戶端的特定狀態,那麼就會因為服務的狀態與中介層用戶端的狀態相連結,而無法透過多用戶層要求來重複使用 WCF 中介層用戶端。

  • 如果服務必須對個別用戶端進行驗證,您必須在中介層上為每個傳入要求建立新的用戶端,而不是重複使用 WCF 中介層用戶端 (或 WCF 用戶端通道物件),這是因為建立 WCF 用戶端 (或 ChannelFactory<TChannel>) 之後,就無法修改中介層的用戶端認證。

  • 當通道及其建立的用戶端為安全執行緒 (Thread-Safe) 時,它們可能不支援同時將一個以上的訊息寫入網路傳輸。 如果您正在傳送大型訊息,尤其是傳送資料流 (Streaming) 時,傳送作業可能會進入封鎖狀態而等候其他傳送作業完成。 這會產生兩種問題:無法並行存取,以及可能在控制流程返回重複使用通道的服務時發生死結 (Deadlock) 狀況 (亦即,共用用戶端呼叫某個服務,而這個服務的程式碼路徑又反過來回呼此共用用戶端)。 無論您重複使用什麼類型的 WCF 用戶端都是如此。

  • 您必須處理已發生錯誤的通道,不論您是否共用該通道。 不過,在重複使用通道時,發生錯誤的通道可撤銷一個以上的暫止要求或傳送。

如需示範針對多個要求重複使用用戶端的最佳做法範例,請參閱 ASP.NET 用戶端中的資料繫結

此外,您還可以為那些使用可透過 XmlSerializer 加以序列化之資料型別的用戶端增進啟動效能。這些用戶端會在執行階段針對這些資料型別產生並編譯序列化程式碼,可能因此拖慢啟動效能。 ServiceModel 中繼資料公用程式工具 (Svcutil.exe) 可以透過從這些應用程式的已編譯組件產生必要序列化程式碼的方式,改善應用程式的啟動效能。 如需詳細資訊,請參閱如何:使用 XmlSerializer 改善 WCF 用戶端應用程式的啟動時間

另請參閱