Другой возврат XML в операции WCF - PullRequest
1 голос
/ 13 мая 2010

Я записываю службу в международный стандарт HTTP, и есть один метод, который может возвращать три разных результата XML, называть их Single, Multiple и Error.Теперь я написал класс IXmlSerializable, который может использовать каждый из этих результатов и генерировать их.Однако WCF, похоже, настаивает на том, что у меня может быть только одно возвращаемое корневое имя XML.Мне нужно выбрать XmlRoot для моего пользовательского объекта или Single, Multiple или Error.

Как я могу настроить WCF, чтобы я мог во время выполнения выбрать, каким будет корень?

Это то, что у меня есть в настоящее время.

/// <summary>
/// A collection of items.
/// </summary>
[XmlRoot("Multiple", Namespace = "DAV:")]
public sealed class ItemCollection : IEnumerable<Item>, IXmlSerializable

/// <summary>
/// Processes and returns the items.
/// </summary>
[WebInvoke(Method = "POST", UriTemplate = "{*path}", BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
[XmlSerializerFormat]
ItemCollection Process(string path);

ItemCollection реализует IXmlSerializable и может выбирать, какой из возможных возвратов для записи, однако корневой XML-узел ВСЕГДА Множественный, поскольку атрибут XmlRootкласс ItemCollection.

1 Ответ

1 голос
/ 26 мая 2010

Оказывается, что хитрость заключается в использовании XmlSchemaProvider с IsAny, установленным в true, вместо использования XmlRoot.

читайте здесь для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms733901.aspx

...