Я работаю с 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
или svcutil.exe
(независимо от того, является ли онаэти инструменты могли бы даже создать объектную модель, которая могла бы успешно сериализовать / десериализовать этот конкретный XML - вопрос энергичных дебатов).Я планирую создать Message Contract для реализации этих сервисов, и мне интересно, могу ли я сделать что-то похожее на следующее:
[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
объектами напрямую?