2011-07-18 58 views
3

我目前正在開發一個Web服務,它將用作Perforce服務器的外觀。WCF + NHibernate + Web服務軟件工廠2010-反饋請求

換句話說,客戶端不是直接聯繫Perforce服務器,而是從Web服務發送和接收消息,然後將消息轉發給Perforce服務器。這種分離主要是出於安全原因(即:客戶端永遠不應直接訪問Perforce服務器)。

另一個要求是將Web服務連接到SQL Server數據庫。在對ORM進行一些研究之後,我遇到了NHibernate。它似乎具備開發高效Web服務所需的所有功能,例如緩存和延遲加載。

我還發現Web Service Software Factory 2010,根據微軟是「資源的綜合集合旨在幫助您快速,一致構建遵循知名體系結構和設計模式的Web服務」

這裏是我的問題:

  1. 我注意到,Web服務軟件工廠2010自2010年以來,我不願使用它,如果該框架沒有跟上最新的或已經過時尚未更新。我還注意到它沒有爲端點提供TCP連接,這是我想用來在Web服務和客戶端之間傳輸數據的協議之一。 WSSF的適應性如何?我可以覆蓋一些生成的代碼嗎?

  2. WCF和NHibernate能夠很好地協同工作嗎?你有什麼意見/建議可以告訴你如何一起處理這兩種技術?我最關心的是如何在WCF環境中爲NHibernate創建會話管理器。

  3. 由於性能是Web服務的基礎,您會建議我使用TCP協議而不是HTTP嗎?如果我要使用TCP,在WCF中有什麼方法可以簡單地序列化我想要傳遞的實體,而不是先將它們轉換爲SOAP格式?

由於這是我第一次使用WCF和NHibernate,手頭任務的歡樂的複雜性是相當艱鉅的。我已經分別爲每項服務準備了一些很好的教程,但是我沒有找到一個能夠在一起工作的人。

如果您有任何建議/建議可以遵循您自己的技術經驗,我將非常感激。

謝謝你的時間,祝你有美好的一天。

回答

6

1)根據您使用的項目方法,Web服務軟件工廠可能對您的工具箱有用。我建議如果你對項目採取合同優先的方式(即你已經有XSD文件用於你的信息,或者你的團隊中有人將預先設計你的信息和服務合同),那麼WSSF可能有用。

我個人的經驗是,這些工具沒有增加太多的價值,但你的里程可能會有所不同。但是,如果這是您的第一個嚴重的WCF項目,該指導值得一讀。2)如果你做對了,NHibernate和WCF可以成爲一個夢幻組。

使用ORM和WCF的最大阻抗不匹配之一是,可以從模型中的一個對象導航的對象模型通常很龐大,並且可以快速拖拽數百或數千個相關對象。由於延遲加載和NHibernate的強大功能,很容易對服務實現對數據庫實際產生的影響一無所知。

因此,我認爲最重要的一條建議是避免通過電線發送/接收域模型對象,並小心設計您的DTO。這迫使你非常明確地考慮你做的(或不做的)數據,以及實際需要導航的關係。也就是說,如果您有一個域對象A(使用NHibernate映射),理想情況下,您將擁有不同的支持A的不同客戶端場景的DTO版本(例如BriefA,DetailedA,BsAssociatedWithA,PerformTask1OnA,PerformTask2OnA等)。當你開始時,這可能看起來像是矯枉過正,但從長遠來看,它會節省你的時間,並給你一個更可預測和可維護的軟件。

關於會話管理,有很多方法可以做到這一點,他們非常簡單。 Here是一個很好的起點。

3)你的DTOs的設計對性能也很重要。在DTO封裝所需的數據和需要滿足30個不同場景的臃腫域對象之間的性能差異可能是數量級的。

也只是使用標準DataContract/DataMember屬性來確保您的DTO可以使用內置序列化器。這些速度非常快。

WCF的一個奇妙之處在於它能夠讓您通過簡單的配置更改來改變Web服務的許多方面。從簡單的HTTP轉換爲SOAP消息,或從文本更改爲二進制編碼,或從net.tcp更改爲http傳輸都可以通過一個或兩個開關輕輕完成。這使得您可以非常輕鬆地進行試驗並找到符合您要求的最佳配置。我的經驗是,net.tcp上的二進制編碼在大多數情況下都能提供最好的結果,但有太多因素可以簡單地假設這對你來說是最好的選擇。

祝你好運!

+0

我想親自謝謝Degorolls對此非常詳細,周到和有益的答案。我從未想過得到這樣的答案(實際上,我已經失去了希望有人回答我)。這是對你的善意的證明。你已經回答了我的所有問題,我會聽取你的建議。謝謝你,我希望能像你一樣爲我服務。我也希望那些偶然發現這個問題/答案的人獲得他們所尋求的答案。 –

+1

感謝您的客氣話。這是侯賽因的榮幸。與您的項目一切順利。 –