2011-06-16 105 views
4

正如主題行所描述的,我正在將C#庫公開爲WCF服務。最終我們想要公開所有功能,但目前範圍僅限於庫API的子集。本練習的目標之一是確保WCF服務使用請求/響應消息交換模式。所以接口/ API將會改變,因爲現有的庫不會使用這種模式將庫轉換爲WCF Web服務

我已經開始實施服務合同和請求/響應對象,但是當涉及到設計DataContracts時,我不確定哪個要走的路。 我分離回去並用DataContract/DataMember屬性註釋現有的庫類VS定義新的類,它們就像現有類的代理類一樣。

有沒有人有類似的任務經驗或有任何建議,哪種方式效果最好?我想指出,我們的團隊擁有現有的庫,因此有它的源代碼。任何指針或最佳做法將有所幫助

+0

記住要考慮是否要使用肥皂或休息或兩者兼而有之。這將對您的合同設計產生影響。看看最近發佈的Microsoft Web API。 – 2011-06-16 19:45:45

回答

4

我的建議是使用適配器模式,在這種情況下基本上意味着創建全新的DataContracts和ServiceContracts。這將允許所有內容獨立變化,並允許您優化WCF的WCF和API的API(如果有意義的話)。你想要做的最後一件事是沿着修改路線走下去,發現一旦你幾乎完成了某件事就不會映射到正確的位置。

+0

謝謝Ethan。我其實是這樣做的。我定義了定義服務和數據合同的全新類別 – CodeKata 2011-06-18 04:43:20

2

從.NET 3.5 SP1開始,您不再需要使用[DataContract]/[DataMember]屬性修飾要公開的對象。所有的公共財產將被自動暴露。這就是說,我個人更喜歡使用特殊的DTO對象,並使用這些屬性進行公開和裝飾。然後我使用AutoMapper來映射實際域模型和我想要公開的對象。

+0

謝謝Darin。我同意你的看法,儘管我對圖書館不熟悉,所以避免使用Automapper。我也擔心在我的生產環境中使用它,因爲我不知道它是如何被測試的。我不知道Automapper是否能很好地與Unity協同工作。 – CodeKata 2011-06-18 04:45:17

1

如果您要繼續使用現有的庫,但想要控制作爲Web服務API公開的內容,我建議將新類作爲封裝器定義在庫上。

我的意思是說,即使您認爲您不打算繼續在其他環境中使用它,也不要「轉換」現有的庫。如果它已經過測試和證明,那麼請利用這一事實並繞過它。

+0

謝謝戴夫。所有3個答案都有相同的主題,我很高興我的方法沒有什麼不同。感謝您的反饋意見 – CodeKata 2011-06-18 04:46:04