Я пытаюсь создать реализацию WSTransfer (я понимаю, что Роман Кисс уже написал ее для WCF, но на самом деле она не соответствует спецификациям)
Я закончил тем, что отказался от контрактов данных на контактах службы, потому что WSTransfer слабо связан; поэтому каждое сообщение создания выглядит как Сообщение создания (Запрос сообщения).
Это прекрасно работает, и все прекрасно, пока не пришло время отозвать ответ.
У меня проблема в том, как создается ответ WSTransfer. Принимая create в качестве примера, ответ выглядит как
<wxf:ResourceCreated>
<wsa:Address>....</wsa:Address>
<wsa:ReferenceProperties>
<xxx:MyID>....</xxx:MyId>
</wsa:ReferenceProperties>
</wxf:ResourceCreated>
Как видите, в ответном сообщении есть 3 разных пространства имен XML.
Теперь достаточно легко, когда кто-то участвует; вы можете (даже если вы его не выставляете) создать контракт данных, установить значения и запустить его обратно
Message response = Message.CreateMessage(request.Version,
"http://schemas.xmlsoap.org/ws/2004/09/transfer/CreateResponse",
resourceCreatedMessage);
Однако проблема возникает в установке различных пространств имен для дочерних элементов в ответе; Похоже, контракты WCF этого не делают. Даже используя
[MessageBodyMember(Namespace="....")]
для отдельных элементов в классе ответа не вносит никаких изменений, все становится частью пространства имен, указанного для класса контракта.
Итак, как мне применить разные пространства имен к отдельным элементам в сообщении WCF; или через контракт, или через какие-то другие поигрыши?