6

Acabo de escribir una nueva versión de un servicio web de WCF y quiero asegurarme de no haber hecho ningún cambio en los contratos de Servicio y Datos.WCF Service Backwards Compatibility Check

Recordando mis días como desarrollador de Combi VB6, recuerdo lo fácil que fue especificar la versión de lanzamiento anterior del componente en tiempo de compilación, y hacer que el compilador verifique que se mantenga la compatibilidad binaria.

Me imagino algo similar llamado (con suerte) una verificación de "Compatibilidad de contrato". Utilizaría los metadatos para realizar una comprobación similar a la que hizo el env de VB6. Esto podría hacerse como un paso de compilación separado que ejecutaría una utilidad.

Estoy dispuesto a aceptar que no existe tal utilidad. Si ese es el caso, ¿alguien tiene alguna idea sobre cómo se vería el algoritmo para lograr esto?

  1. recuperar los metadatos de la versión actual de servicio en vivo
  2. recuperar los metadatos de una nueva versión del servicio
  3. Contrato de servicio de controlar y cada Contrato de datos para la compatibilidad. Solo informando cambios de última hora.

Paso 3 parece como que sería complejo, pero sin duda automatizable ...

+2

Si hay problemas de compatibilidad, puede usar el espacio de nombres del contrato de servicio para el control de versiones, y mantener ambas versiones disponibles hasta que esté seguro de que la anterior ya no se usa. –

Respuesta

1

Nada de eso existe Andy, pero si usted consigue algo en funcionamiento por el que usted tiene 2 DLL (una antigua y una nueva), entonces podrías usar algo como BitDiffer para compararlos.

Hubo un proyecto en Codeplex que ayudó con las versiones de WCF, pero no recuerdo cómo se llama, lo siento.

Buena suerte,

-Keith

+0

También puede intentar comparar 2 DLL utilizando las herramientas ApiChange, LibCheck o NDepend. – aponomarenko

4

Estas situaciones se resuelven mediante las pruebas de integración/regresión. Se escriben pruebas de integración para la versión inicial y después de modificar el servicio a la nueva versión, se vuelven a ejecutar pruebas de integración con el cliente anterior. Si tuvieron éxito, no rompiste nada. Si fallan, verás exactamente qué llamadas causaron problemas.

+1

Buen punto. Eso serviría. Si una verificación estática no es posible, entonces una verificación de tiempo de ejecución sería la siguiente mejor opción. Gracias –

0

tratar de generar pruebas unitarias utilizando "Codeplex WCF Load Test" para el contrato de interfaz de edad y ejecutarlos en una nueva:

Esta herramienta toma un archivo de rastreo WCF y un proxy de cliente WCF, o un contrato de interfaz WCF, y genera una prueba de unidad C# que reproduce la misma secuencia de llamadas encontradas en el archivo de rastreo. La prueba unitaria se puede usar para probar la carga del objetivo.