2010-04-13 318 views
0

我有一個支持大約10個合同的WCF服務,我們一直在支持一個客戶端,該客戶端具有特定於此客戶端的所有業務規則,現在我們有另一個客戶端將使用完全相同的合同(所以我們不能改變這種情況),他們將以前面調用的客戶端的方式調用服務,現在我們可以通過輸入參數之一來區分這兩個客戶端的唯一方式。基於這個輸入參數,我們必須使用稍微不同的業務邏輯 - 兩種客戶端的邏輯都是相同的50%,其餘的邏輯將不同(業務/ DAL層)。我不想在每個合同實施中使用if else語句來區分和重新路由邏輯,如果另一個客戶端進來了,是否還有一種乾淨的方式來處理這種情況。我正在使用框架3.5。就像我說過的,我無法更改新客戶端的任何合同(服務/數據合同)或當前服務調用基礎結構。謝謝WCF業務邏輯處理

回答

0

你可能會主辦兩次服務,並讓客戶連接到正確的?除此之外,我想,你必須使用某種if-else。

0

我不能說這是否適用於你,但我們已經解決了沿着這條道路有類似的問題:

  • 我們添加一個頭信息,其中上下文一些邏輯被稱爲,指出消息。
  • 此信息以RequestContext類結束。
  • 我們委託實例合同的DI容器的實現(在我們的例子StructureMap)
  • 我們已經定義的策略如何某些組件由容器提供的責任:
    • 有一個某種組件的默認值。
    • 屬性可以放置在專門化,這些專業化表示應該使用哪種類型的請求上下文。
  • 這是通過現有的機制
  • 註冊到容器中我們以陳述的服務實現ObjectFactory.With(requestcontext).getInstance<CONTRACT>()
  • 依賴現在解決的方式,所描述的方法應用於做出集裝箱的調用。也就是說,最終基於放置在標題中的請求信息來提供專業化。

這是一個如何解決這個問題的例子。