TLDR: cómo creo servicios WCF que son compatibles con versiones anteriores - es decir, cuando despliegue una nueva versión del servicio en el servidor, todos los clientes en las versiones anteriores puede seguir utilizando el servicio.Haciendo servicios WCF compatibles con versiones anteriores
Estoy creando un servicio web que permitirá a las aplicaciones cliente recuperar una lista de plugins. Al menos tendré una operación como FindPlugins(string nameOrDescription)
que, en el servidor, hará una búsqueda y devolverá una lista de objetos.
Desafortunadamente, no puedo garantizar que todos mis clientes se actualizarán con cada nueva versión de mi servicio; es más, estoy seguro de que muchos de ellos se arrastra a la última versión, y tendrá versiones antiguas - la edad, no puedo estar seguro, pero sé que van a ser viejo :)
Si se crea una nueva operación de servicio, cambiar el esquema o realizar algún tipo de operación de interrupción en el lado del servidor, listo. Necesito diseñar compatibilidad hacia atrás en todo momento.
Aquí hay un ejemplo. Digamos que devuelvo una lista de Plugin
s, cada una de las cuales tiene un nombre y una descripción, y despliego v0.1 de mi servicio. Luego, agrego un enlace de descarga e implemento eso como v0.2 de mi servicio.
Algunas opciones que veo son:
- clientes force para actualizar a la última servicio (no viable)
- Romper el servicio para los clientes antiguos (no viable)
- Anexar una número de versión para cada operación y solo consume las operaciones específicas de la versión (por ejemplo,
FindPluginsV1
,FindPluginsV2
) - no parece práctico con múltiples operaciones - de un nuevo servicio con cada nueva versión - no parece práctico
¿Se pueden satisfacer sus requisitos agregando más operaciones de servicio? –
@hugh sí, como mencioné, puedo incluir un número de servicio (por ejemplo, v1) en cada operación; o, al tener diferentes servicios (por ejemplo, V1Service, v2Service). Pero no me gusta ese enfoque debido a la duplicación/mantenimiento. – ashes999