簡體   English   中英

WCF服務-編碼標准-將類庫放在哪里?

[英]WCF Service - Coding Standard - Where to put my class library?

我正在嘗試在程序中實現WCF服務,但是我不明白:

根據JuvalLöwy2007 O'Reilly Media的《 Programming WCF Services編程》一書。 附錄C-WCF編碼標准C2-基本:1.將服務代碼放置在類庫中,而不要放置在任何托管EXE中。

我不明白,我應該把代碼放在哪里? 我所有的類都在表單應用程序中定義,如何從服務的類庫中調用winforms的類。

我在這里想念什么嗎?

謝謝,Eyal

我喜歡這樣構造WCF解決方案:

YourProject.Contracts (類庫)
包含所有服務,操作,故障和數據合同。 可以在純.NET到.NET方案中在服務器和客戶端之間共享

YourProject.Service (類庫)
包含實現服務的代碼,以及實現此功能所需的任何支持/幫助程序方法。 沒有其他的。

YourProject.ServiceHost (可選-可以是Winforms,Console App,NT Service)
包含用於調試/測試或可能也用於生產的服務主機。

這基本上給了我服務器端的東西。

在客戶端:

YourClient.ClientProxies (類庫)
我喜歡將客戶端代理打包到一個單獨的類庫中,以便可以由多個實際的客戶端應用程序重用它們。 可以使用svcutil或“添加服務引用”並手動調整產生的可怕app.config來完成,也可以使用ClientBase<T>ChannelFactory<T>構造手動執行客戶端代理(在共享合同程序集時)。

1-n個實際客戶 (任何類型的應用)
如果被共享,通常只會引用客戶代理程序集或合同程序集。 這可以是ASP.NET,WPF,Winforms,控制台應用程序,其他服務-您可以將其命名。

那樣; 我的布局很好,整潔,一遍又一遍地使用它,我真的認為這使我的代碼更整潔,更易於維護。

這是受到Miguel Castro的極限WCF屏幕投射到卡爾·富蘭克林在DotNet Rocks電視上的啟發-強烈推薦的屏幕投射!

是的,這有點令人困惑。

我們在這里談論服務實現。 Loewy在這里的意思是,實現服務的代碼應該在單獨的項目中。 承載WCF服務的代碼(即實現您的服務合同的類)應該什么都不做,只能調用該服務實現代碼。

因此,您的Windows Forms客戶端應用程序使用代理,該代理依次調用WCF服務應用程序宿主層,而代理層又調用您的服務邏輯。

進一步發展,在UI側具有三層,在服務側具有四層是一個非常好的主意。 命名空間可能是

Company.Project.UI.WinForms
Company.Project.UI
Company.Project.ServiceClient

Company.Project.ServiceHost
Company.Project.Service
Company.Project.BusinessLogic
Company.Project.Persistence

對於較簡單的項目,這將是過大的殺傷力,但對於(例如)一種或兩種服務方法,這將使生活變得更加輕松。 尤其重要的是,隔離測試每一層都應該非常簡單。

這是遵循Löwy的建議的典型項目結構:

MyProject.Data
MyProject.Logic
MyProject.Services
MyProject.ServiceHosts
MyProject.Presentation

然后, MyProject.ServiceHosts將引用MyProject.Services並公開在那里定義的服務。 因此,以Löwy的語言來說, MyProject.Services是類庫,而MyProject.ServiceHosts包含托管可執行文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM