2012-02-28 33 views
0

我的服務都應該解析爲一個動作ILogging /的LogMessage其中有「日誌條目」作爲SOAP體內的根元素SOAP請求。爲此,我有一個方法LogMessage,期望LogMessageRequest類型的參數。共享相同的消息合約兩個動作

LogMessageRequest具有MessageContract屬性與WrapperName設置爲日誌條目:

[MessageContract(WrapperName = "log-entry")] 
public class LogMessageRequest 
{ 
    ... 
} 

我也期待對動作ILogging另一個SOAP請求/ LogException與「登錄條目」作爲根元素在SOAP主體。爲此,有一個LogException方法和一個LogExceptionRequest類型的參數。

兩個SOAP操作之間的區別在於'log-entry'內的子元素'message'是不同的(對於LogMessage,'message'是一個字符串,對於異常,它是一個複雜的實體)。

問題: 由於LogMessageRequest和LogExceptionRequest都具有相同的包裝名稱(log-entry),所以我得到一個來自LogException的異常,說「log-entry已被LogMessage導出」。

我試圖使用相同的請求類二者並具有對象類型「消息」。但是,這拒絕工作。

任何指針? (這種方式沒有改變SOAP請求的範圍)。

回答

0

雖然可能有辦法用一個公共接口匹配不同的模式,我建議一個比較穩妥的辦法:建立在服務的一個接口適配器將其他的接口相匹配。

這樣,醜陋被隔離,應用程序只能有唯一一個服務接口工作。

0

我不相信你可以實現從你的描述這一點使用MessageContract /數據的合同。您可以使用XmlSerializer屬性來完成它,但聽起來您需要使用操作約定中的Message類並查看消息xml來確定它是哪一個。你能發佈WSDL/SOAP定義的相關位嗎?

相關問題