私は 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
メッセージ コントラクトでの使用) は私の目的に適していますか? Message
そうでない場合、オブジェクトを直接操作することなく、XML を直接操作するという目標を達成するにはどうすればよいでしょうか?