我的服务应该解析一个操作ILogging / LogMessage的SOAP请求,该操作将“log-entry”作为SOAP主体内的根元素。为此,我有一个方法LogMessage,它需要LogMessageRequest类型的参数。
LogMessageRequest将MessageContract属性设置为WrapperName作为日志条目:
[MessageContract(WrapperName = "log-entry")]
public class LogMessageRequest
{
...
}
我还期待另一个SOAP请求用于动作ILogging / LogException,其中“log-entry”作为SOAP主体中的根元素。为此,有一个LogException方法和一个LogExceptionRequest类型的参数。
两个SOAP操作之间的区别在于,'log-entry'中的子元素'message'是不同的(对于LogMessage,'message'是一个字符串,对于异常,它是一个复杂的实体)。
问题: 由于LogMessageRequest和LogExceptionRequest都具有相同的包装器名称(log-entry),因此我收到一个来自LogException的异常,说“LogMessage已经导出了log-entry”。
我尝试为两者使用相同的请求类,并且具有object类型的'message'。但那拒绝工作。
任何指针? (顺便说一句,没有更改SOAP请求的范围)。
答案 0 :(得分:0)
虽然可能有一种方法可以将不同的模式与通用接口相匹配,但我建议采用更谨慎的方法:在其中一个服务接口上构建适配器以匹配另一个接口的接口。
这样,丑陋是孤立的,应用程序只需要使用一个服务接口。
答案 1 :(得分:0)
我不相信您可以使用您的描述中的MessageContract / data合同来实现此功能。您可以使用XmlSerializer属性来执行此操作,但听起来您需要在操作协定中使用Message类并查看消息xml以确定它是哪一个。你能发布WSDL / SOAP定义的相关部分吗?