2011-04-21 34 views
0

我們正在就使用WCF和創建服務和客戶端支持進行一些討論。WCF中不可互操作的服務的優點?

目前我們通過提供silverlight版本的服務庫客戶端來支持silverlight客戶端,這樣我們就可以保持使用接口定義的服務契約的強類型。

這沒問題,但是使用接口定義的服務使得其他客戶端很難使用,因爲WSDL有很多方法返回ArrayOfAnyType,並且一切都只是客戶端的對象(可以將其轉換爲正確的類型,但正如我所說,它的尷尬)。

我們可以重寫我們的服務,使用顯式的DTO進行消息傳輸,並使用類似的客戶端庫來重新創建我們的業務對象,這將使我們的服務更加互操作。

雖然這樣做似乎阻止了我們的一些選擇,例如使用EntityFramework和它提供的自我跟蹤實體,因爲這些需要在客戶端和服務器上共享相同的庫,並且不可互操作(如果我這是錯誤的)

似乎在互操作和開箱即用的更多功能之間存在權衡,允許更快地開發解決方案。

所以我的問題是,我們通過決定不可互操作並只支持.net和silverlight客戶端(如果支持silverlight客戶端可以被認爲是不可互操作的),我們獲得了哪些優勢?有什麼有用的.net功能可以阻止我們決定互操作嗎?

是否存在允許這兩種類型的解決方案共存的標準技術,因此您可以使用可用的全部功能支持.net客戶端,但是仍然支持其他非.NET客戶端?

回答

0

您可以使用此門面模式。

將您當前的邏輯移到業務層,不要通過WCF公開它。

現在爲您希望支持的每個合同創建一個WCF服務。此圖層將業務層對象映射到業務層中的合同對象和調用功能。

然後,您可以爲每個客戶端提供所有邏輯和自定義服務的中心位置。