En varios clientes hemos encontrado el siguiente escenario, “se debe actualizar el servicio virtualizado ya que servicio original cambió, se virtualiza el servicio con la operación actualizada pero el servicio virtualizado no cambia”:
Para hacer más sencilla la explicación voy a realizar el ejemplo con un servicio mock generado para pruebas. Este servicio tiene una operación llamada AddNumbers esta operación tiene un MessageContract llamado NumberRequest y este tiene un DataContract llamado Numbers, la operación AddNumbers retorna un DataContract NumbersResponse. Este DataContract en MSE se puede Visualizar en el Layout DataEntity Management.
Servicio visto con WCF Test Client con la operación AddNumbers, en esta podemos observar que obtiene el contrato Numbers, este tiene dos propiedades: Number1 y Number2
En MSE en el Layout DataEntity Management las podemos visualizar así:
Cambio en el Servicio
En el día a día nuestros servicios van cambiando tanto en sus operaciones como en sus contratos, en un mundo ideal deberíamos realizar cambios en los namespaces cuando cambie un contrato en un servicio, pero desafortunadamente así no es, en el mundo real de SOA MSE nos colabora con la administración de estas entidades (Contratos), primero veamos la actualización del Servicio WCF, esta fue hecha de una vez al contrato si haber realizado cambio alguno en el servicio o en el namespace.
Como hemos identificado que cambio el contrato, en el MSE lo que hacemos es una importación de schemas, no es necesario realizar importación de operaciones o de recursos.
Aquí seleccionamos Import Schemas
Seleccionamos los esquemas o esquema a importar, para nuestro caso vamos a seleccionarlos todos:
Después de la importación Exitosa, vamos al Menú Tools-Manage Service Model Components-Data Entities
En el menú desplegable seleccionamos el schema que queremos actualizar, para nuestro caso el schema numbers que está en el namespace http://xxxx/guidances/mockservices/datacontracts/numbers/1.0, seleccionamos la entidad de Tipo Complejo (Complex Type)
Si hay más de una versión(revisión)de esta entidad MSE nos muestra está información por fechas, aquí podemos ver que en la revisión del 1/11/2011 1:00:28 AM la entidad Numbers tiene dos propiedades, Number1 y Number2
La revisión Latest Revision la entidad Numbers tiene tres propiedades, Number1, Number2 y Number3, esta revisión es la que vamos a seleccionar
Seleccionamos Update Revision Reference
Aquí visualizamos que revisión hemos seleccionado:
En la pestaña Update References seleccionamos por cual revisión vamos a reemplazar la que seleccionamos, en este caso vamos a reemplazar la revisión Latest revision por la revisión 1/11/2011 1:00:28 AM
Cuando finalizamos el registro del Schema lo que sucede al final es la actualización de la Tabla SchemaObjectDependencies, cambia la asociación entre las columnas SchemaObjectID y ParentObjectID, después de la importación podemos reiniciar los servicios de MSE Runtime y hacer la actualización del Servicio expuesto por el MSE
Aquí volvemos a realizar el llamado por medio del WCF Test Client y ya vemos actualizada la entidad con el cambio solicitado