本主題討論使用 Windows Communication Foundation (WCF) 之仲介層用戶端應用程式特有的各種問題。
增加 Middle-Tier 用戶端效能
相較於先前使用 ASP.NET 的 Web 服務,WCF 用戶端實例的建立可能會因為 WCF 的豐富功能集而更加複雜。 例如,當 ChannelFactory<TChannel> 對象開啟時,它可以與服務建立安全會話,此程序會延長用戶端實例的啟動時間。 一般而言,這些額外的功能功能不會影響用戶端應用程式,因為 WCF 用戶端會進行數次呼叫,然後關閉。
不過,中間層客戶端應用程式可以快速地建立許多 WCF 客戶端物件,因此初始化需求會增加。 在呼叫服務時,有兩個主要方法可增加中介層應用程式的效能:
快取 WCF 用戶端物件,並在可能的情況下重複使用它進行後續呼叫。
建立 ChannelFactory<TChannel> 物件,然後使用該物件為每個呼叫建立新的 WCF 用戶端通道物件。
使用這些方法時要考慮的問題包括:
如果服務使用會話來維護用戶端特定狀態,則您無法重複使用具有多用戶端層要求的仲介層 WCF 用戶端,因為服務的狀態會系結至仲介層客戶端的狀態。
如果服務必須針對每個用戶端執行身份驗證,則您必須在中介層上為每個傳入請求建立新的用戶端,而不是重複使用中介層的 WCF 用戶端(或 WCF 用戶端通道物件),因為中介層的用戶端憑證無法在建立 WCF 用戶端(或 ChannelFactory<TChannel>)之後進行修改。
雖然通道所建立的通道和用戶端是執行緒安全的,但它們可能不支援同時將多個訊息傳送至網路。 如果您要傳送大型訊息,特別是在執行串流作業時,傳送操作可能會被阻塞,等候另一個傳送操作完成。 這會導致兩種問題:一是缺乏並行性,二是在控制流程返回至重複使用通道的服務時可能發生死結(也就是說,共用用戶端呼叫的服務,其程式代碼路徑導致回呼至共用用戶端)。 不論您重複使用的 WCF 用戶端類型為何,都是如此。
無論您是否共用通道,都必須處理發生錯誤的通道。 不過,重複使用通道時,發生故障的通道可能會中斷多個擱置的要求或傳送。
如需示範針對多個要求重複使用用戶端的最佳做法的範例,請參閱 ASP.NET Client 中的數據系結。
此外,若您的用戶端使用可序列化的數據類型,可通過在運行時產生並編譯這些類型的序列化代碼來增加啟動效能,這樣可能導致啟動速度變慢。 ServiceModel 元數據公用程式工具(Svcutil.exe)可以從應用程式的編譯元件產生必要的串行化程序代碼,以改善這些應用程式的啟動效能。 如需詳細資訊,請參閱 如何:使用 XmlSerializer 改善 WCF 用戶端應用程式的啟動時間。