2010-10-10 82 views
1

我正在設計一個C#/ .NET 3.5項目的架構,它將通過WCF在客戶端和服務器之間進行通信。這通常會詢問 - 應答系統,從而爲例,服務方法之一可能是這樣的:自動生成的代理是實現異步WCF客戶端的最佳方法嗎?

User GetUserByLastName(string lastName); 

另外一個要求就是WCF客戶端方法需要被異步調用,使他們穿上」對UI的響應性產生不利影響,因爲這些方法在某些情況下可能需要很長時間才能執行。

我有一個根據Microsoft的文檔實現的概念證明,因此客戶端代理是使用Visual Studio中的「添加服務引用」對話框自動生成的,並且我選中包含異步方法的選項。

這適用於概念驗證,但我遇到過很多博客文章和其他強烈建議不要在大型​​項目中使用自動生成代理的參考文獻。其中幾個來源提供了替代手段,包括手動創建代理或使用反射動態創建代理,但這些解決方案似乎總是隻實現同步WCF調用。

一個自動生成的異步WCF客戶端代理涉及相當多的鍋爐代碼,我不願意爲每個服務和方法手動實現和維護。

所以我的問題是:

它是一個壞主意,使用自動生成的代理異步WCF服務,如果是這樣,有不涉及的鍋爐板代碼顯著人工維護一個很好的選擇?

回答

2

這是不好的,有幾個原因,我相信你已經閱讀了所有這些博客文章。對我來說,主要缺點是:

1)信道創建是一個完全混亂和醜陋和低效

2)這是不可能緩存的ChannelFactory

3)不與DI

很好地工作

4)如果您重複使用客戶端,通道可能會出現問題,您必須對其進行編碼

5)這是代碼生成,如果代碼發生更改,則必須重新生成。

6)說實話,它並沒有節省很多代碼。如果使用web.config/app.config來設置終點,那麼使用服務的接口(並緩存它)創建通道工廠,然後創建代理是幾行代碼。

+0

關於你的觀點6,我還沒有看到一個例子說明了如何做到這一點,以便異步操作不涉及大量的代碼來實現單一服務方法所需的基礎結構。任何建議或參考? – newdayrising 2010-10-10 21:33:33

+0

@ElectricDialect看看這裏:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/3e581713-4986-48bd-97ee-1f63759187d4 – Aliostad 2010-10-10 22:06:00

相關問題