2011-02-24 18 views
0

我們需要公開的是目前居住在ASP.NET應用程序我們的組織中的其他應用的一些服務(即AddressValidatorService,CustomerFinderService)暴露WCF服務。通過WCF暴露這些服務似乎是天作之合,但我沒有看到如何把這些常見的服務拉成WCF包裝以這樣的方式,我現有的ASP.NET應用程序可以繼續用最少使用他們的任何最佳實踐代碼更改和/或意識到他們正在使用的服務不再處於進行中。創建/從現有的ASP.NET應用程序

我特別找上如何組織現有的ASP.NET解決方案,以及是否建議爲我們舉辦新的WCF在同一個解決方案或在我們的ASP.NET應用程序和外部來電者都提到了一些新的共享WCF的解決方案。

此外,簡單地推廣目前只通過ASP.NET向進程完成的數據合同消費的DTOs是否是不好的做法,還是最好創建用[DataContract]明確裝飾的重複DTO?後者看起來像是一場維護噩夢。

回答

1

要回答你的第二個問題:

而且,它是不好的做法,簡單地推動當前的DTO只能通過ASP.NET進程消耗到完全成熟的數據合同,或者是它最好創建用[DataContract]明確裝飾的重複DTO?後者看起來像是一場維護噩夢。

它被認爲是不好的做法,暴露你的商業模式爲WCF合同。所以,如果你的DTO是您的域模型的副本,那麼它會嚴格的禁忌,因爲
1模型將直接影響到合同,因此所有客戶端的任何改變使用它是
2.你會被暴露您的業​​務「訣竅」到外部世界。

後者對於任何不斷髮展的系統來說都會變得困難,但是後來你有了各種各樣的開源工具(比如AutoMapper),這些工具可以簡化你的映射過程。

0

您可以將現有項目轉換爲WCF,然後繼續使用的項目引用使用它的過程。然後可以使用WCF客戶端使用永久源。 WCF客戶端時所消耗過WCF從ClassName類的名稱轉換爲ClassNameClient,但班會發揮作用幾乎相同。

例如:

MyClass obj = new MyClass(); 
obj.DoSomething(withData); 

將成爲:

MyClassClient obj = new MyClassClient(); 
obj.DoSomething(withData); 

你會發布WCF項目,一些端點,像address.example.com,然後使用一個服務引用端點引用代碼,像其他項目中的項目參考一樣。

請注意,儘管外部引用項目不會受到更改的影響,或者不知道數據正在通過網絡傳播,但如果您對該項目進行了閒聊,它肯定會對性能造成影響。您可能希望將相關方法合併爲單一方法以節省往返時間。

0

如果這些被公開爲靜態頁面的服務,有沒有神奇的包裝 - 你將需要移動代碼到一個獨立的服務實現類,並把一個.svc文件在它的前面。 (或者使用WCF4無文件激活或服務工廠,但是這裏離核心問題稍微有些偏離。)

如果這些作爲ASMX公開,您實際上可以將ASMX facade放在WCF服務類的前面並像從傳統ASMX Web服務那樣獲得基本的HTTP/XML/ASMX響應。您通過標準WCF配置向非遺留使用者公開相同的WCF服務類。

最後,你可以將任何WCF服務爲basicHTTP與serviceMetadata + httpGetEnabled,你會得到由傳統消費者ASMX服務的可用服務端點。

http://msdn.microsoft.com/en-us/library/ms751433.aspx

相關問題