我正在与 WCF 合作,通过 SOAP 实现一组非常(非常)复杂的交互(我们已经由一个从未听说过计算机的人控制的委员会交给我们)。我将收到如下所示的消息:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
... (lots of "standard" stuff that noone has ever dared
to cobble together in such non-standard ways before)
</s:Header>
<s:Body>
<MyIncrediblyComplexXmlElement>
...
</MyIncrediblyComplexXmlElement>
</s:Body>
</s:Envelope>
...并且我不希望将正文内容解析为由xsd.exe
or创建的对象模型svcutil.exe
(这些工具是否甚至可以生成可以成功序列化/反序列化此特定 XML 的对象模型是一个激烈争论的问题)。我计划创建一个消息契约来实现这些服务,我想知道我是否可以做类似于以下的事情:
[ServiceContract(Namespace = "mynamespace")]
public interface IMyServiceInterface
{
[OperationContract(Action = "requestaction", ReplyAction = "replyaction")]
MyResponseMessage MyMethod(MyRequestMessage request);
}
[MessageContract(IsWrapped = false)]
public class MyRequestMessage
{
[MessageBodyMember(Namespace = "mynamespace", Order = 0)]
public XmlElement MyIncrediblyComplexXmlElement { get; set; }
}
[MessageContract(IsWrapped = false)]
public class MyResponseMessage
{
[MessageBodyMember(Namespace = "mynamespace", Order = 0)]
public XmlElement SomeResponseXmlElement { get; set; }
}
...然后直接操作在请求和响应消息中传入和传出的 XML。这将大大简化开发,因为我只需要处理可能出现在消息中的 XML 的一小部分,而且我可以使用它们比生成的对象模型所允许的更简单。
这种模式(XmlElement
在消息合同中使用)是否适用于我的目的?如果不是,我怎样才能实现直接使用 XML 而不必Message
直接使用对象的目标?