Tengo un servicio C# WCF REST que permite la adición de un marcador, enviando una solicitud HTTP POST con el marcador serializado en XML. He especificado el contrato de operación para el servicio, que toma el xml y automáticamente deserializa el objeto para mí. Mi problema es que la deserialización solo funciona correctamente si los elementos XML de la solicitud se dan en orden alfabético, y los valores de los elementos que están fuera de servicio no se rellenan.¿Pueden los servicios WCF REST admitir la deserialización de mensajes XML con un orden de elementos arbitrario?
This behaviour has been reported elsewhere.
Encuentro esto bastante insatisfactorio; Considero que el requisito de construir el XML en un orden específico es innecesario y un gran dolor de cabeza. Este es un requisito importante para agregar a todos los clientes del servicio y una fuente de problemas potencialmente difíciles de depurar.
¿Es posible dirigir WCF para que sea independiente del orden de elementos XML?
Algunos detalles adicionales para fines de aclaración:
Mi contrato de operación se ve así:
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/{username}/bookmarks", ResponseFormat = WebMessageFormat.Xml)]
public void PostBookmark(string username, RestBookmark newBookmark);
El RestMessage se ve de la siguiente manera:
[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; }
}
Si envío el siguiente mensaje XML, se rellenarán entonces sólo la propiedad UserName del objeto RestMessage cuando se invoca PostBookmark():
<?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>
Me gusta la idea de usar XMLSerializer. –
¡Gracias por la ayuda y la respuesta clara! –