.net - serializar - Agregar un DataMember a un DataContract existente en WCF
serialize and deserialize c# (1)
WCF manejará con gracia a los nuevos miembros que no reconoce. El consumidor del contrato (ya sea del lado del cliente o del servidor) simplemente no "verá" a ese miembro, por lo tanto, una consecuencia es que el nuevo miembro nunca debe ser una propiedad IsRequired=true
.
Además, WCF enlazará de forma transparente la nueva propiedad entre componentes, siempre que DataContract implemente IExtensibleDataObject
. Por ejemplo, si la ruta del mensaje va:
cliente actualizado => servidor antiguo => servidor actualizado
luego, el servidor actualizado al final de la cadena seguirá viendo el nuevo DataMember. Sin embargo, el "servidor anterior" no verá ese nuevo DataMember.
Si un servidor antiguo envía un mensaje a un cliente actualizado, entonces el nuevo DataMember se establecerá en default(type)
al deserializarse en el nuevo cliente.
Aquí encontrará más información sobre las mejores prácticas para el control de versiones de DataContract .
Y este artículo analiza la diferencia entre los cambios de Breaking y Non-Breaking .
Me gustaría agregar un DataMember
a uno de mis DataContract
s. Me gustaría saber cómo se comportarán los servidores y clientes existentes en presencia de un nuevo DataMember
si una de las partes no se actualiza.
Recuerdo que hay una manera de hacer que el DataMember
opcional, pero me pregunto si funcionaría en todos los escenarios:
- Cliente actualizado => antiguo Servidor
- antiguo Cliente => Servidor actualizado
- servidor actualizado <= antiguo Servidor
- antiguo Cliente <= servidor actualizado