Alternativas para un buen versionado WCF Service y Addin VS 2010

118 views
Skip to first unread message

Kiquenet

unread,
May 17, 2012, 4:24:45 PM5/17/12
to altnet-...@googlegroups.com
Hola a todos 

En el momento actual se me ha encargado mantener una aplicación, realmente un Addin de VS 2010 , que utiliza un servicio WCF. Ya  hay alguna versión en producción del servicio wcf, pero aun tenemos mejoras pendientes para  funcionalidades que van saliendo. 
Existe un instalable (msi, setup.exe) para el Addin de VS 2010. 
Este addin se instala en múltiples equipos de desarrolladores (100, 200, ...), digamos que cada equipo WinXP o Win7 del desarrollador es "producción", mientras que el servicio WCF está en un servidor Win2008 r2, en IIS.

Hay un tema de organizacion del codigo bastante peculiar, que hace dificil de mantener y testear. En la medida de lo posible se intenta refactorizar.
La problemática que se presenta es en relación al versionado del Addin como del servicio WCF en un entorno tan crítico. Si falla el Addin o servicio tenemos a muchos desarrolladores cabreados... Por eso creemos que es importante tener un versionado eficaz.

Como idea preliminar se ha planteado controlar la última versión estable y no permitir que haya instaladas en los equipos otras versiones inferiores.
Se piensa en un fichero xml en una ruta compartida de un servidor común o comprobando las versiones del Addin instalado en cada equipo con la versión del instalable MSI (que estaría en una ruta compartida accesible por todos los equipos). También se habló de tener la versión en una tabla de una base de datos.

Además, hay que forzar  que las versiones instaladas en este momento dejen de funcionar para que se instalen la nueva versión que queremos implementar.

Otra sugerencia es modificar el contrato del servicio WCF para pasarle el número de versión desde el Addin y hacer el control adecuado. Al menos así, se obligaría a instalar la última versión, y apartir de ese momento se podrían controlar las versiones instaladas.

De mi parte estoy tratando de impulsar un versionado eficaz en este sentido, y me gustaría saber si el grupo tiene más alternativas o sugerencias en este tema.

Muchas gracias  de antemano.

David Lay

unread,
May 17, 2012, 4:49:39 PM5/17/12
to Grupo AltNet Hispano
Si estamos hablando solo de vs2010 entonces podrias aprovechar en extension manager para notificar actualizaciones y distribuir de esta manera el plugin. Me corrigen si me equivoco pero me parece que se pueden agregar sources internos de extensiones tal como a nuget.

Para forzar la version, lamentablemente me parece que tendras que hacer una modificacion si o si. Lo que me parece mas recomendable es que el mismo plugin verifique el extension manager y se niegue a funcionar si hay una nueva version (asi solo cambias el plugin) ahora, esto te lo digo camino a casa asi que no se si algo de esto es realmente posible, pero espero que las ideas te sirvan.
David Lay M

Por favor disculpe faltas de ortografía o si el correo ha resultado muy brebe ya que he repondido desde mi movil.

From: Kiquenet <kiqu...@gmail.com>
Date: Thu, 17 May 2012 13:24:45 -0700 (PDT)
Subject: [altnet-hispano] Alternativas para un buen versionado WCF Service y Addin VS 2010
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/e2eO7t_ZjMIJ.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Carlos Peix

unread,
May 18, 2012, 5:13:42 AM5/18/12
to altnet-...@googlegroups.com
Hola Kiquenet,

Por que no utilizar servicios distintos (distintos Uris) para cada version? que te impide tener un servicio por cada version de la API?

Luego, pudes definir, segun tus deseos, cuantas versiones soportas en funcionamiento.

----------------------------------
Carlos Peix

2012/5/17 Kiquenet <kiqu...@gmail.com>

--

Kiquenet

unread,
May 18, 2012, 6:26:21 AM5/18/12
to altnet-...@googlegroups.com
Carlos,

la idea que tenemos es forzar  que las versiones instaladas en este momento (Addin que llama al servicio http:\\produccion\service1) dejen de funcionar para que se instalen la nueva versión del Addin que queremos implementar.

Lo mejor es cambiar el servicio, así se verán forzados a tener que instalar la nueva versión.

Por otro lado, hay un tema de organización interna que hace dificil de mantener varias versiones del mismo servicio.  Para un servicio se tiene el sitio web (y puerto), y las uri siempre serán contra ese sitio.

Carlos Peix

unread,
May 18, 2012, 7:11:26 AM5/18/12
to altnet-...@googlegroups.com
Hola Kiquenet,

Entiendo el objetivo, sin embargo, me gusta elegir las opciones que me dan mas flexibilidad.

Si utilizas el mismo servicio, veo los siguentes problemas:
  • tienes un problema con los clientes actualmente en funcionamiento, los cuales no soportan la notificacion de nueva version
  • te obligas a cambiar todos los clientes de una sola vez, al momento que decides el cambio. Esto implica que con cada version te obligas a una decision de todo o nada, no puedes hacer un deploy progresivo

En cambio, si utilizas distintos servicios, tambien puedes lograr forzar el cambio, pero no estas obligado a hacerlo de una vez.

En otras palabras, estarias comprando flexibilidad.

Un saludo

----------------------------------
Carlos Peix

2012/5/18 Kiquenet <kiqu...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/HcIpFy7MHosJ.

Walter Poch

unread,
May 18, 2012, 11:46:25 AM5/18/12
to altnet-...@googlegroups.com
Hola  Kiquenet,

Creo que es lo que propones en tu mail, yo haría:

Primero investigar la idea de implementar un repositorio de NuGet interno.

Si no sirve:
Un servicio de notifiación de versiones, esta implementación sería única e informaría la última versión disponible, y si la versión instalada es obsoleta (actualización obligatoria).
Un servicio por versión de API, (ej: ServicioV1, ServicioV2...) a donde cada cliente se conecta al que le corresponde.

Saludos,
--
Saludos,

Walter G. Poch
Sr. .Net Developer
--------------------------------------------
Cell: +54 (9 341) 3353273
walte...@gmail.com

Kiquenet

unread,
May 25, 2012, 8:19:22 AM5/25/12
to altnet-...@googlegroups.com
Carlos, Walter , muchas gracias por las respuestas, van bien encaminadas.

Desgraciadamente, no tenemos control en la organización y tenemos las manos atadas, no tenemos esa flexibilidad ni nos permiten seguir ese camino.

Sin duda, un servicio por versión sería lo menos problemático y más adecuado, pero tendremos que optar por otras opciones y asumir todos los problemas que conlleva :(
 
Saludos,

nelopa...@gmail.com

unread,
May 25, 2012, 9:29:03 AM5/25/12
to altnet-...@googlegroups.com
Hola Kiquenet, la opción que te dieron Carlos y Walter también la
podés implementar como un único sitio web, es decir:

http://miservicio.empresa.com.ar/V1
http://miservicio.empresa.com.ar/V2
http://miservicio.empresa.com.ar/V3

saludos.
nelo

2012/5/25 Kiquenet <kiqu...@gmail.com>:
> --
> Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de
> Grupos de Google.
> Para ver este debate en la Web, visita
> https://groups.google.com/d/msg/altnet-hispano/-/Hzur0e39wWoJ.

Walter Poch

unread,
May 25, 2012, 8:03:32 PM5/25/12
to altnet-...@googlegroups.com

Otra alternativa sino es pasar la version como parametro en todas las llamadas (podria ser en un header de los mensajes) y un servicio tipo proxy reverso que inspeccione este header y redireccione la peticion a la implementacion del servicio de dicha version.

Saludos,

Cristian Prieto

unread,
May 27, 2012, 9:03:33 PM5/27/12
to altnet-...@googlegroups.com
Es un webservice verdad? (o sea, SOAP?) entonces porque no utilizar WCF routing? Es una de las maneras en WCF de manejar versiones del servicio...  http://msdn.microsoft.com/en-us/library/ee517421.aspx

Digo verdad :)

Cristian Prieto


2012/5/26 Walter Poch <walte...@gmail.com>

Walter Poch

unread,
May 28, 2012, 10:27:04 AM5/28/12
to altnet-...@googlegroups.com
Gracias Cristian, no sabía que existía eso. Ya leo un poco para informarme.

Cristian Prieto

unread,
May 28, 2012, 10:31:41 AM5/28/12
to altnet-...@googlegroups.com
Si Walter, en WCF es la forma de solucionar el problema de versionamiento...

Cristian Prieto


2012/5/29 Walter Poch <walte...@gmail.com>

Walter Poch

unread,
May 28, 2012, 10:33:10 AM5/28/12
to altnet-...@googlegroups.com
Hace un tiempo lo investigué pero por lo que veo apareció en .net 4 =) 

Cristian Prieto

unread,
May 28, 2012, 11:00:06 AM5/28/12
to altnet-...@googlegroups.com
Realmente no existia antes de 4.0 como algo "agregado" o incluido en la Framework, pero podias lograr lo mismo usando un WCF Router, hay varias formas de lograrlo (Recuerdo haberlo aprendido en el libro e Juval Lowy tiempo atras), haciendo una busqueda sencilla en google encontre un articulo de Michelle Leroux Bustamante acerca de como crear tu propio WCF Router  http://msdn.microsoft.com/en-us/magazine/cc500646.aspx y la segunda parte  http://msdn.microsoft.com/en-us/magazine/cc546553.aspx Pero como mencionas WCF routing como tal existe como parte de la cajita en WCF 4.0

Saludos!

cibrax

unread,
May 28, 2012, 2:55:35 PM5/28/12
to AltNet-Hispano
Un router de WCF estaria bueno si quiere mantener multiple versiones
del mismo servicio corriendo, pero por lo que menciono Kinetec, el
problema es mas sencillo ya que solo existiria una version del
servicio y el addin estaria forzado a utilizar siempre la ultima
version. Si ese es el caso, implementaria un contrato en el servicio
de WCF para pedir la version, y el addin se tendria que fijar si
soporta esa version o tirar un error para que lo actualicen caso
contrario. Seria ese el escenario ?

Con multiple versiones del mismo servicio corriendo, un servicio que
funcione como registry tambien serviria, le pasas la version y te
devuelve la url donde esta publicado.

Saludos
Pablo.


On 28 mayo, 12:00, Cristian Prieto <kement...@gmail.com> wrote:
> Realmente no existia antes de 4.0 como algo "agregado" o incluido en la
> Framework, pero podias lograr lo mismo usando un WCF Router, hay varias
> formas de lograrlo (Recuerdo haberlo aprendido en el libro e Juval Lowy
> tiempo atras), haciendo una busqueda sencilla en google encontre un
> articulo de Michelle Leroux Bustamante acerca de como crear tu propio WCF
> Router  http://msdn.microsoft.com/en-us/magazine/cc500646.aspxy la segunda
> parte  http://msdn.microsoft.com/en-us/magazine/cc546553.aspxPero como
> mencionas WCF routing como tal existe como parte de la cajita en WCF 4.0
>
> Saludos!
>
> Cristian Prieto
>
> 2012/5/29 Walter Poch <walter.p...@gmail.com>
>
>
>
> > Hace un tiempo lo investigué pero por lo que veo apareció en .net 4 =)
>
> > El 28 de mayo de 2012 11:31, Cristian Prieto <kement...@gmail.com>escribió:
>
> > Si Walter, en WCF es la forma de solucionar el problema de
> >> versionamiento...
>
> >> Cristian Prieto
>
> >> 2012/5/29 Walter Poch <walter.p...@gmail.com>
>
> >>> Gracias Cristian, no sabía que existía eso. Ya leo un poco para
> >>> informarme.
>
> >>> El 27 de mayo de 2012 22:03, Cristian Prieto <kement...@gmail.com>escribió:
>
> >>> Es un webservice verdad? (o sea, SOAP?) entonces porque no utilizar WCF
> >>>> routing? Es una de las maneras en WCF de manejar versiones del servicio...
> >>>>http://msdn.microsoft.com/en-us/library/ee517421.aspx
>
> >>>> Digo verdad :)
>
> >>>> Cristian Prieto
>
> >>>> 2012/5/26 Walter Poch <walter.p...@gmail.com>
>
> >>>>> Otra alternativa sino es pasar la version como parametro en todas las
> >>>>> llamadas (podria ser en un header de los mensajes) y un servicio tipo proxy
> >>>>> reverso que inspeccione este header y redireccione la peticion a la
> >>>>> implementacion del servicio de dicha version.
>
> >>>>> Saludos,
> >>>>> On May 25, 2012 10:29 AM, "nelopause...@gmail.com" <
> >>>>> nelopause...@gmail.com> wrote:
>
> >>>>>> Hola Kiquenet, la opción que te dieron Carlos y Walter también la
> >>>>>> podés implementar como un único sitio web, es decir:
>
> >>>>>>http://miservicio.empresa.com.ar/V1
> >>>>>>http://miservicio.empresa.com.ar/V2
> >>>>>>http://miservicio.empresa.com.ar/V3
>
> >>>>>> saludos.
> >>>>>> nelo
>
> >>>>>> 2012/5/25 Kiquenet <kique...@gmail.com>:
> >>> walter.p...@gmail.com
>
> >>> --
> >>> Has recibido este mensaje porque estás suscrito al grupo
> >>> "AltNet-Hispano" de Grupos de Google.
> >>> Para publicar una entrada en este grupo, envía un correo electrónico a
> >>> altnet-...@googlegroups.com.
> >>> Para anular tu suscripción a este grupo, envía un correo electrónico a
> >>> altnet-hispan...@googlegroups.com
> >>> Para tener acceso a más opciones, visita el grupo en
> >>>http://groups.google.com/group/altnet-hispano?hl=es.
>
> >>  --
> >> Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano"
> >> de Grupos de Google.
> >> Para publicar una entrada en este grupo, envía un correo electrónico a
> >> altnet-...@googlegroups.com.
> >> Para anular tu suscripción a este grupo, envía un correo electrónico a
> >> altnet-hispan...@googlegroups.com
> >> Para tener acceso a más opciones, visita el grupo en
> >>http://groups.google.com/group/altnet-hispano?hl=es.
>
> > --
> > Saludos,
>
> > Walter G. Poch
> > Sr. .Net Developer
> > --------------------------------------------
> > Cell: +54 (9 341) 3353273
> > walter.p...@gmail.com

Kiquenet

unread,
Jun 11, 2012, 5:48:09 AM6/11/12
to altnet-...@googlegroups.com
Muchas gracias por los comentarios.
No conocía WCF Routing, para investigarlo buscaré algún ejemplo completo en github, aparte de los interesantes artículos de M.Bustamante.

Sí,  ese es el escenario: sólo existiría una versión del servicio, y el Addin fuerza a utilizar siempre esa versión, y además en el contrato del WCF Service se implementaría para pedir la versión.

Saludos y gracias.
Reply all
Reply to author
Forward
0 new messages