2011-11-17 82 views
0

我有五個獨立的服務,其中每一個對應於不同的數據庫表,如產品,用戶,訂單等WCF異常Handaling

我試圖跨越WCF送我的自定義異常。我瀏覽過互聯網,我有一個包裹故障異常在我的自定義異常:

interface 
[FaultContract(typeof(NoSuchInstanceException))] 

cs 
throw new FaultException<NoSuchInstanceException>(e, new FaultReason(e.Message), newFaultCode("UserFault")); 

問題是,當我更新客戶端代理消失的服務。我瀏覽了互聯網並找到了下面的解決方案,它說要將映射添加到服務參考SVCMAP文件。 http://travisspencer.com/blog/2007/11/

<NamespaceMapping 
    TargetNamespace="http://schemas.datacontract.org/2004/07/MyCompany.MyProject.Exceptions" ClrNamespace="MyCompany.MyProject.Exceptions" /> 
</NamespaceMappings> 

我的問題是,每一個服務需要自定義異常增加的映射,但是當我這樣做。將顯示一個錯誤,表示該異常已在其他服務之一中定義。我是否將服務合併到一項服務中?任何幫助真的很感激。由於

+0

_「問題是當我更新客戶端代理消失的服務時。」_請詳細說明。 – CodeCaster

+0

@CodeCaster:當我添加:[FaultContract(typeof(NoSuchInstanceException))]到我的服務接口並更新我的服務引用。服務客戶端和iservice客戶端消失並顯示一條警告,指出「檢查必需的名稱空間是否已映射到不同的數據協定名稱空間,並考慮使用名稱空間集合顯式映射它」。同樣的錯誤顯示在 – ministrymason

回答

0

我能想到的兩個選項:

  • 合併的服務爲一體的 - 具有多業務共用相同的數據類型使客戶在這個問題上。
  • 將共享數據類型移入單獨的dll(類庫項目)。然後從服務器和客戶端引用共享數據類型庫。在創建服務引用時,選擇重用數據類型的選項。
+0

以上的博客中 - 「有多個服務共享相同的數據類型會在客戶端出現此問題。」_是的,我不敢從兩個不同的服務發送字符串。你能解釋一下你的意思嗎? – CodeCaster

+0

@CodeCaster:字符串是一種本地數據類型,它的行爲非常類似於具有共享數據類型庫的情況。如果您有一個自定義類型並從兩個不同的服務中返回它,那麼這個自定義類型將在客戶端上生成兩次 - 每個服務一次。 –

+0

感謝您的回覆。我認爲第一種選擇是唯一可能的選擇。我不想將DLL提供給任何使用我的服務的人。我並不熱衷於有一項巨大的服務。有沒有與孩子一起提供父母服務的方式?這是將多項服務作爲一項服務的最乾淨的解決方案嗎? http://www.meineck.net/2008/04/wcf-hosting-multiple-wcf-services-as.html – ministrymason