que depende de cómo se haya configurado el contrato de datos.
En WCF, utilizando todos los valores predeterminados, su servicio utilizará el DataContractSerializer (DCS) para serializar su objeto en XML. El DCS serializará sus campos en orden, primero los públicos, luego los privados. Dentro de cada grupo de visibilidad, ordenará los campos/propiedades alfabéticamente por nombre.
Por lo tanto, si se introduce una nueva propiedad pública MiddleName
y ya tenía FirstName
y LastName
, que estaría bien: el viejo XML habría sido
<YourObject>
....
<FirstName>.....</FirstName>
<LastName>.....</LastName>
</YourObject>
y su nuevo uno podría simplemente añadir un nuevo propiedad al final:
<YourObject>
....
<FirstName>.....</FirstName>
<LastName>.....</LastName>
<MiddleName>....</MiddleName>
</YourObject>
Dicha actualización "añadir algo al final" debería funcionar bien, el DCS simplemente ignorar las etiquetas adicionales en el XML.
Sin embargo: había que presenten una propiedad llamada Gender
, que se pegó entre<FirstName>
y <LastName>
y que por lo tanto romper el orden de los datos en el XML y por lo tanto sería romper el contrato de datos - no "viejo" cliente ser capaz de llamar a su nuevo servicio.
Con el fin de tomar el control de esto, se puede poner Order=
atributos específicos de miembros de datos en su contrato de datos:
[DataContract]
public class SomeAddress
{
[DataMember(Order=0)]
public string FirstName;
[DataMember(Order=1)]
public string LastName;
}
A continuación, fácilmente podría añadir una nueva propiedad - sólo tiene que añadir al final de ¡la lista!
[DataContract]
public class SomeAddress
{
[DataMember(Order=0)]
public string FirstName;
[DataMember(Order=1)]
public string LastName;
[DataMember(Order=2)]
public string Gender;
}
Así mediante el uso del atributo Order=
en sus contratos de datos, se puede tomar el control de su diseño de XML, y usted puede hacer simples extensiones de contratos de datos existentes actualizaciones de no separación.
Para obtener más información y conocimientos profundos, debe leer Serialization in Windows Communication Foundation en el sitio web de la revista MSDN, muy recomendable.
Voy a intentar esto, pero ¿es el error esperado la versión "No se pudo cargar el ensamblado" que estoy obteniendo? – HitLikeAHammer
Eso lo hizo. No cambié el orden de ningún miembro existente, pero agregué Order = 2 a los nuevos miembros. La próxima versión tendrá Order = 3 en todos los miembros nuevos y así sucesivamente. – HitLikeAHammer