У меня есть служба CEST WCF REST, которая позволяет добавлять закладки, отправляя запрос HTTP POST с закладкой, сериализованной в XML. Я указал контракт на обслуживание для службы, которая подбирает xml и автоматически десериализует объект для меня. Моя проблема заключается в том, что десериализация работает правильно только в том случае, если элементы XML в запросе заданы в алфавитном порядке, а значения любых элементов, которые не в порядке, не заполняются.
Это поведение было сообщено в других местах .
Я считаю это довольно неудовлетворительным; Я считаю, что требование создавать XML в определенном порядке не является обязательным, и это является большой головной болью. Это основное требование, которое необходимо добавить ко всем клиентам службы, и источник потенциально сложных проблем для отладки.
Можно ли указать WCF как независимый от порядка XML-элементов?
Некоторые дополнительные сведения для уточнения:
Мой рабочий контракт выглядит так:
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/{username}/bookmarks", ResponseFormat = WebMessageFormat.Xml)]
public void PostBookmark(string username, RestBookmark newBookmark);
RestMessage выглядит следующим образом:
[DataContract(Name = "Bookmark", Namespace = "")]
public class RestBookmark
{
[DataMember]
public string BookmarkMd5 { get; set; }
[DataMember]
public string Url { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
}
Если я отправлю следующее XML-сообщение, при вызове PostBookmark () будет заполнено только свойство UserName объекта RestMessage:
<?xml version="1.0"?><Bookmark><UserName>nick.street</UserName><Url>http://www.stackoverflow.com</Url><BookmarkMd5>f184eb3347cf94f6ce5f5fc2844e3bdd</BookmarkMd5><Description>Developer Forum</Description><Title>Stack Overflow</Title></Bookmark>