我正面臨着WCF和命名空間的一些問題。情況是這樣的:我的webservice(我們稱之爲「WS-A」)應該作爲另一個(更復雜的)web服務(「WS-B」)的代理。 WS-A爲我們開發的應用程序公開了更簡單的接口,因此它簡單地「隱藏」了一些我們不想在我們的應用程序中結束的業務邏輯。我們獲得了WS-B的WSDL和XSD模式,並使用svcutil將它們導入到C#中。顯然它繼承了WS-B的命名空間(http://ws.source.com)。對於WS-A,我們使用一些其他名稱空間(http://ws.example.com)。一些數據結構必須在兩個Web服務之間共享,但我無法重用相同的數據合同。 AFAIK WCF要求數據和服務合約的名稱空間是「靜態的」,並且不能在運行時決定。有沒有辦法與WCF做到這一點,或者我應該改變我的策略?在不同命名空間中共享數據合同
編輯:這裏是一個例子,試圖澄清我需要什麼。
Namespace A V Namespace B +--------------+ | +--------------+ | | | | | Application >-------+ Webservice A +-------+ Webservice B | | | | | | +--------------+ | +--------------+
應用程序調用WS-A的操作「GiveMeData」,該操作使用名稱空間A,如其WSDL中所述。響應所包含的類別「數據」,這實際上是使用命名空間B.
[DataContract(Namespace="http://namespaceB")]
public class Data {
...
}
所以響應將數據綁定到錯誤的命名空間從WS-B中得到的數據結構的引用。
您是否考慮將共享數據合同移動到可以在服務之間共享的獨立程序集中?您可以在代碼中設置命名空間 - 例如'[DataContract(Namespace =「http://some.namespace.com/」)''。 – Tim
問題是共享XSD命名空間而不是程序集命名空間之間的數據契約。我有一個對象,我想從/到/兩個名稱空間的序列化。 –
如果我正確理解你的問題,我會改變這種策略。您可能會從不緊密耦合的數據合同中受益。 (當你每次簽訂合同B時都想改變合同A?) 我會使用單獨的名稱空間,但可能會通過繼承通用接口或類似工具來在WCF之外共享數據合同。 – Guran