Programación y Estrategias de Negocios RSS 2.0
# Saturday, March 27, 2010


Share

Uno de los clientes de 3Metas tiene una base instalada muy importante de aplicaciones construidas en Visual Fox Pro 7, 8 y 9. Durante los últimos meses hemos trabajado en conjunto para desarrollar una estrategia de migración de estas aplicaciones hacia una arquitectura orientada a servicios (SOA) construida con WCF y el Framework 3.5 de .Net.

Uno de los aspectos claves de un proceso como estos consiste en evitar al máximo que se siga construyendo funcionalidad en Visual Fox Pro (VFP) así que el primer paso de la estrategia consiste en la integración de VFP con servicios de Windows Communication Foundation (WCF) de forma tal que las aplicaciones actuales se vean beneficiadas de las mejores en la lógica de negocios o de nuevas funcionalidades que se construyen con la última tecnología disponible.

1. Lo primero que debe hacerse es construir un servicio de WCF en lo que no profundizare especialmente.

2. En nuestro caso una vez que tuvimos construido el servicio construimos una fachada para su utilización desde VFP.

3. En esta fachada establecemos las referencias a los servicios por medio de la herramienta de Visual Studio, allí verificamos el tipo de conversión que se realizará sobre las colecciones genéricas, como queremos proteger la inversión del cliente en este proyecto esta fachada deberá poderse usar desde VFP pero también desde aplicaciones desarrolladas con .Net hoy y en el futuro.

4. Creamos una clase que estará visibles por COM desde VFP y que será la fachada para esta herramienta

5. Esta clase debe estar decorada como COM visible [ComVisible(true)] y para asegurar las opciones de Intellisense también agregamos la decoración de generación de la Interfaz [ClassInterface(ClassInterfaceType.AutoDual)]

6. Aunque visual Studio 2008 (VS2008) crea el constructor de forma predeterminada preferimos asegurarnos así que agregamos el constructor, tener presente aquí que el constructor no puede sobrecargarse ni recibir parámetros para evitar problemas en COM

7. Luego creamos los métodos que serán consumidos por VFP y se los decora como visibles para COM [ComVisible(true)].

8. En nuestro caso los métodos del servicio de WCF devuelven colecciones genéricas de tipos específicos, por ejemplo la colección de colores de la entidad color: [CollectionDataContract(Name = "Colores", Namespace ="http://myDomain.com/Data/2010/01")] public class Colores: Collection<ColorEntity> {}, para que estos métodos puedan ser consumidos desde VFP y teniendo en cuenta la restricción de COM para el manejo de genéricos se realiza una modificación al método para que no retorne la colección sino que retorno un arreglo de objetos que es algo que si puede ser manejado por VFP, la posibilidad de convertir la colección genérica en un arreglo se adiciono con LINQ, así que debe establecerse la referencia a LINQ en el proyecto y la clase, al final debe quedar algo como esto:

 

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Runtime.InteropServices;
   6:  using ServicioProducto;
   7:   
   8:  namespace ServicesFacade
   9:  {
  10:   
  11:      [ComVisible(true)]
  12:      [ClassInterface(ClassInterfaceType.AutoDual)]
  13:      public class ProductoFacadeVFP
  14:      {
  15:          //default constructor
  16:          public ProductoFacadeVFP() {}
  17:        
  18:          /// <summary>    
  19:          /// Metodo trae los colores del Sistema
  20:          /// </summary>
  21:          /// <returns></returns>
  22:          [ComVisible(true)]
  23:          public Color[] GetColores()
  24:          {
  25:              Colores colores = null;
  26:   
  27:              try
  28:              {
  29:                  ServicioProductoClient srv = new ServicioProductoClient();
  30:                  colores = srv.GetColores();
  31:                  srv.Close();
  32:              }
  33:              catch (Exception ex)
  34:              {
  35:                  throw ex;
  36:              }
  37:   
  38:              return colores.ToArray();
  39:          }
  40:       }
  41:  }

 

9. Al compilar este proyecto se obtendrá una DLL y un archivo de configuración que corresponde a la forma como se establecerá la comunicación con el servicio (Address y Bindings), estos dos archivos son los que deben entregarse a los desarrolladores de VFP para que consuman los servicios.

 

Completada la fase de preparación y construcción de los servicios y su fachada los desarrolladores de VFP ya pueden integrar estos componentes en sus aplicaciones, para ello deben realizarse las siguientes actividades:

 

1. Registrar la Interfaz COM de la fachada de los servicios por medio del comando regasm, idealmente debería utilizarse el parámetro CODEBASE, la instrucción sería algo como esto si se corre desde el directorio del Framework 2.0 de .Net: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>RegAsm.exe "C:\3Metas\Clients\Cliente\Proyecto\ServiceFacade\ ServicesFacade.dll" /CODEBASE

2. Uno de los aspectos más importantes de WCF es la separación de la configuración del servicio del código, el address y el binding del servicio que están definidos en el archivo de configuración, este archivo de configuración se generó al compilar la fachada. Para cada proyecto en el que va a utilizarse la fachada se debe copiar el archivo de configuración del servicio en la misma ruta del ejecutable de la aplicación de VFP o para depuración en la ruta donde reside el proyecto, este archivo debe renombrarse con el nombre de la aplicación de VFP y la extensión .config, en nuestro caso queda algo como esto: aplicaciondelcliente.exe.config. Muchos de los errores que se pueden presentar al usar la fachada tienen que ver con el hecho de que la aplicación no encuentra el archivo de configuración.

3. Registrada la interfaz COM de la fachada y renombrado y ubicado correctamente el archivo de configuración del servicio ya está todo listo para que el desarrollador pueda utilizar los servicios desde VFP. Solo debe utilizar el método CREATEOBJECT con el nombre de la clase de la fachada. Por ejemplo:

 

 

   1:  LOCAL Colores 
   2:  LOCAL MyColor as ServiceFacade.ServicioProducto.Color 
   3:  LOCAL ProductoFacade as ServicesFacade.ProductoFacadeVFP 
   4:   
   5:  ProductoFacade = CREATEOBJECT("ServicesFacade.ProductoFacadeVFP") 
   6:  Colores = ProductoFacade.GetColores() 
   7:   
   8:  OPEN DATABASE "C:\3Metas\Clients\Integration\sampledata" EXCLUSIVE 
   9:  USE color IN 0 EXCLUSIVE ALIAS tblColor 
  10:  ZAP 
  11:   
  12:  FOR EACH Item IN Colores 
  13:      INSERT INTO color (ColorId) VALUES (Item.ColorId) 
  14:  ENDFOR 

 

Listo, el equipo de desarrolladores de VFP está consumiendo servicios de WCF.

 

Juan Peláez

CTO

3Metas Corp.

 

 

Aclaraciones importantes:

 

· Con Visual Fox Pro se pueden consumir servicios Web, así que si se exponen los servicios de WCF con un binding básico HTTP el servicio de WCF se ve exactamente igual que un servicio web y por tanto se consume sin problemas desde FoxPro, sin embargo desde la perspectiva técnica puede llegar a tener problemas con objetos de negocios que VFP no entienda o que el servicio de WCF este expuesto por otro binding lo que haría imposible consumirlo desde VFP nativo, en nuestro caso las aplicaciones no estaba construidas consumiendo servicios web y el cliente no quería invertir tiempo de los desarrolladores en que aprendieran a consumir servicios web desde VFP, de allí tenía sentido que ellos consumieran objetos COM que les son familiares.

 

· Al crearse el proyecto de fachada podría configurarse por medio de VS2008 la conversión de las colecciones genéricas en arreglos (ARRAYS) sin embargo eso haría que la fachada perdiera tipos de datos que podrían ser utilizados por clientes de .Net

 

Referencias:

http://www.dotnet247.com/247reference/msgs/15/75021.aspx
http://www.west-wind.com/presentations/VfpDotNetInterop/DotNetFromVFP.asp
http://www.west-wind.com/presentations/dotnetfromVfp/DotNetFromVfp_ComplexObjects.asp
http://blogs.msdn.com/calvin_hsia/archive/2005/09/02/460206.aspx

Publicidad

Migrando aplicaciones de visual fox pro a .net? tratando de establecer una politica o un proceso de desarrollo para sus aplicaciones legacy? contactenos a sales@3metas.com, nuestro equipo tiene la experiencia y las habilidades necesarias para tener resultados exitosos.

Saturday, March 27, 2010 8:24:00 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
3Metas | Arquitectura | Software as a Service | VS2008 | WCF
# Monday, March 01, 2010


Share

En IIS7 se pueden usar otros bindings como por ejemplo net.tcp y named.pipes para acceder a servicios de WCF (en IIS6 solo es posible usar http Binding, para usar uno de los otros se debe hostear el servicio en otro tipo de host como un servicio Windows o una aplicación de consola) y justo esto es una de las ventajas de IIS7, se utiliza todo lo bueno del mundo del IIS como el reciclaje de aplicaciones pero con protocolos muchos mejores para ciertos escenarios como net.tcp.

 

Para habilitar estos protocolos en IIS7 debe ir al panel de control, programs, turn Windows Features On/Off, y verificar que tenga seleccionadas por lo menos las opciones que aparecen en la imagen, en especial lo que tiene que ver con la activación de servicios sobre protocolos no HTTP.

 

WCF Activation

 

Con esta habilitado ya se puede ir al IIS y seleccionar los bindings y protocolos correctos como se muestra en las dos imágenes siguientes:

 

 

IISBinding

 

IISEnabledProtocols

 

 

Ahora puede Hospedar servicios de WCF con bindings como net.tcp que se usa para escenarios de red de área local o named.pipes que se usa para comunicaciones interprocesos en la misma máquina.

Monday, March 01, 2010 4:18:00 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
IIS7 | Software as a Service | WCF
# Saturday, April 11, 2009


Share

Me gusta mucho el conjunto de guías de arquitectura de soluciones .Net del grupo de Patterns and Practices de Microsoft. El documento principal es La Guia de Arquitectura Version 2.0a, una de las principales razones por las que me gusta esta guía es por la definición de cómo encajan los diferentes elementos o tipos de arquitecturas juntas en un esquema que es sencillo pero muy elegante y que se resume en este gráfico:

Elementos Arquitectura

Al segmentar las aplicaciones por tipos (más o menos obvio no?), y separar los conceptos como estilos de arquitectura, atributos de calidad, tendencias etc., se obtiene una forma más sencilla de explicar porque se hace una aplicación de una forma y no de otra, lo que en general podemos decir que es la arquitectura. Una de las secciones más interesante tiene que ver con los estilos de arquitectura (sobre el que profundizare más adelante) ya que establece las diferencias entre elementos que son un poco confusos al seleccionar que tipo de aplicación se quiere construir y nos permite explicar de una manera clara al cliente por que se tomaron estas decisiones de diseño.

Si usted alguna vez se ha preguntado como una arquitectura SOA se integra con una arquitectura por componentes y con el paradigma de Orientación por Objetos este es definitivamente un documento que debería leer.

Juan Peláez

Arquitecto de Software

Publicado en: www.juanpelaez.com

Keywords: Juan Pelaez, Arquitectura de Software, 3Metas, Patterns and Practices, Microsoft, .Net.

Publicidad: Necesita ayuda en la arquitectura de su aplicación .Net?, no está seguro si su desarrollo cumplirá con los requerimientos de escalabilidad, seguridad, requerimientos de negocios o expectativas de los usuarios?, Quiere validar si sus desarrolladores o contratistas siguen las mejores prácticas para el desarrollo de aplicaciones? Los servicios de consultoría en Arquitectura de Soluciones de 3Metas seguramente serán un de las mejores alternativas. Contáctenos al correo electrónico contacto@3Metas.com

Saturday, April 11, 2009 4:18:42 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Arquitectura | Software as a Service
# Tuesday, December 09, 2008


Share

CDN (Content Distribution Network) es un sistema de distribución de archivos basado en ubicaciones geográficas muy útil cuando se construyen sistemas de alta disponibilidad. Ya hice un post del tema hace algunos días aquí.

 

Y también hace poco escribí sobre el sistema de hosting que uso que es basado en Cloud Computing, aquí.

 

Hace poco estos dos servicios se han integrado para ofrecer un mejor paquete y ahora es posible por muy poco dinero y solo con una tarjeta de crédito tener en cuestión de horas un sistema de hosting por demanda integrado con la red de distribución de contenido. Todo parece muy sencillo: creo una carpeta en el sistema del sitio y subo mis archivos, marco la carpeta como publica y listo, ahora esos archivos se distribuyen usando una CDN de las más usadas en el mundo. Cuando no lo quiero mas entonces solo quito la marca de folder publico y listo, ya no se actualiza el archivo en el cache de la CDN.

 

Supongamos que creamos un sitio de distribución de videos del tipo YouTube o de música como sonidolocal.com, eso son miles de canciones o archivos de gran tamaño, un monton de dinero para gastar en ancho de banda, almacenamiento, etc, con estos sistemas lo que hago es pagar por uso, dejar que ellos corran con los costos de infraestructura y demás y puedo crecer el servicio a la medida que mi sitio crezca.

 

Amazon ofrece un servicio parecido llamado S3 que parece funcionar muy bien, pero en el cual hay que pagar por el almacenamiento y aparte por el uso de la CDN, asi que el servicio de Mosso en ese aspecto parece mejor.

 

Cuando empecé mi primera compañía en internet en el año 2000, el primer gasto era de 550 dólares mensuales por un servidor dedicado en DellHost, una cifra absurda para una empresa que había facturado 0 dólares el día 1, pero necesario para poder poner algo en la red. Estos nuevos sistemas de costos y de pago por uso hacen que todo cambie, no solo para las nuevas compañías, también para nuestros clientes.

 

Juan Pelaez

Arquitecto de Software.

 

Keywords: Mosso, CDN, Juan Pelaez, Juan Carlos Pelaez, Software como Servicio, SaaS, Infraestructura como Servicio, Hosting as a Service, Hosting como Servicio, Redes de Distribucion de Contenido.

 

Technorati Tags: ,,,
Tuesday, December 09, 2008 2:22:25 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Arquitectura | Gestion de Empresas de Software | Software as a Service
# Wednesday, October 22, 2008


Share

Una empresa necesita un CRM. (Punto).

 

Quedemos en claro que CRM es una estrategia. Y que la herramienta de CRM no puede ser Excel. Listo. Eso era importante!.

 

Ahora, hay herramientas de CRM como SalesForce.com, (Software as a Service), muy bueno, o usted puede montar en su servidor una herramienta de CRM.

 

Entre muchas opciones de CRM para empresas que empiezan (y no tan pequeñas) esta SugarCRM uno de los sistemas más populares de CRM del mundo. (También se puede montar en un servidor con IIS y PHP). Pero como yo de PHP no sé nada y de pronto quiero meterle la mano al código, personalizar algo, etc, etc, entonces uso SplendidCRM, una implementación de SugarCRM sobre .Net que otros ya han comentado por aquí, y que incluso Miguel Icaza ha revisado por que corre en Mono Sobre Linux.

 

Problemas con Silverlight: Ahora bien, al instalar la última versión disponible (bájela del sitio de spledidCRM, la versión de Codeplex no es la última) en mi sitio de Internet se me presento un error que decía:

 

Silverlight error message
ErrorCode: 2024
ErrorType: ParserError
Message: 2024 An error has occurred.
XamlFile:
Line: 245
Position: 200

 

Tanto en el Home como en el DashBoard. Después de un rato de mirar en internet descubrí que se estaba usando una propiedad obsoleta de Silverlight, ahora la propiedad TextWrapping Ahora recibe solo el atributo Wrap, no como estaba antes que era: WrapWithOverflow.

 

Corrección sencilla. Adjunto acá el ZIP con todos los XAMLs que se corrigieron.

 

Instalacion: este software trae un instalador que hace todo por uno, pero cuando se quiere poner en un servidor de hosting y no se puede correr el instalador, se complica un poco la cosa, afortunadamente lo que puede hacerse es convertir el proyecto en solución Web, publicarlo local y luego copiar los archivos resultantes en el servidor de hosting.

 

Para configurar la base de datos se corre el instalador pero se pone a apuntar al servidor SQL que está en internet. Así pude instalarlo en mi sitio web.

 

Pd: de pronto usted o sus clientes usan esto y nunca han visto este error?, es porque existe un atributo para mostrar los mismos gráficos en Flash si usted no tiene Silverlight.

 

Juan Pelaez

Arquitecto de Software

We are Exceeding Your Expectations.

 

Publicado Originalmente en www.juanpelaez.com/blog

 

Keywords: SplendidCRM, CRM, 3Metas, Estrategias de Negocios, Empresas de Software, Juan Pelaez.

Technorati Tags: ,,

Wednesday, October 22, 2008 2:32:13 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Gestion de Empresas de Software | Silverlight | Software as a Service | Sugar CRM | SplendidCRM
# Monday, July 14, 2008


Share

Acabo de trasladar el sitio www.juanpelaez.com y otros sitios asociados a un nuevo proveedor de hosting, estuve un par de años con el anterior proveedor pero de repente decidieron migrar sus servidores de correo a un servidor Linux (sin notificar a los usuarios), como resultado de la migración estuve desde el 29 de junio hasta el 9 de Julio sin correo, llame en varias ocasiones a Servicio al Cliente, pero nunca pude obtener una solución, así que solo me quedo cambiarme de proveedor, curiosamente el proceso de retirarme del servicio si fue muy rápido, sin embargo no pareció importarle a nadie las razones por las que me estaba cambiando (nadie me pregunto nada).

Hosting

Pues bien me cambie a mosso (the hosting Cloud) un nuevo concepto de hosting realmente novedoso, no preguntan por servidores dedicados, compartidos, virtual servers ni nada de eso, es puro software como servicio (SaaS) o incluso servicios como servicios. (SsaaSs), así que me inscribo en el sistema, me crean una consola de gestión de mis sitios en 5 minutos y estoy listo para empezar a distribuir servicios de hosting:

 

 

· Puedo crear mis clientes

· Luego puedo crear uno o muchos sitios para cada cliente, incluidas cuentas de correo ilimitadas.

· Puedo establecer si a este cliente se le va a facturar (debería!) y el sistema genera las facturas por mí para que yo se las envíe a mis clientes.

· Puedo establecer si los sitios de mis clientes son en Windows (IIS7,.Net 3.5) o Php, Linux, incluso RubyonRails.

· Tengo buenos reportes de uso, de facturación, etc.

· Tengo un buen servicio de soporte por Mail, LiveChat y Telefono, 7x24.

· Todo esto desde la consola Web de administración del sistema.

· tengo 500GB de ancho de banda, 50GB de espacio en Disco y 3 Millones de peticiones web por Mes.

 

 

Si la anterior lista no le impresiona piense en esto, antes tenía un servidor Windows, si alguna vez quería montar una aplicación de pruebas en Linux con Apache, necesitaba otro servidor de hosting, así que estaba realmente limitado a lo que estaba pagando: Un servidor Windows. Ahora no importa si alguna vez necesito un website en Apache Php o en Ruby on Rails simplemente lo tengo, es un cambio de paradigma importante en vez de preguntarme por hardware o Sistemas operativos me preguntan por la necesidad que tengo: Sitios Web.

 

 

Yo mismo migre los apuntadores de los DNS desde mi antiguo proveedor al nuevo, empecé el proceso de registro en este nuevo proveedor a las 3 de la tarde y a las 5pm ya tenía mi correo nuevamente arriba. Apenas termine de cargar los archivos me conecte con el servicio al cliente (10pm) y rápidamente configure mis aplicaciones (básicamente un blog de DASBlog), la gente parecía saber de su tema. Así que en menos de 12 horas ya tenía desde cero mis sitios corriendo en un nuevo servidor.  En teoría solo pago lo que consumo (con un mínimo de 100 dólares) pero parece un buen trato.

Por cierto este servicio es un emprendimiento nuevo de RackSpace que es la compañía mejor clasificada para servicios de hosting de acuerdo con las revisiones de webHost Magazine

Software as a Service

Este es un tema interesante (mas allá de mi cambio de dominio) por que se habla mucho de computación en la nube (Cloud Computing)  y hay muchos rumores y realidades que van desde alquiler de Exchange y SharePoint por parte de Microsoft hasta inversiones gigantes de Microsoft en infraestructura (3 datacenters nuevos en USA, el de Chicago el más grande de USA, etc) hasta nuevo servicios de publicación de aplicaciones corporativas en Internet que serán anunciados en las próximas conferencias de Desarrolladores. Así que empezar a ver este tipo de servicios es realmente un aviso de cómo será el futuro de internet y de la computación.

 

 

En el software as a Service (SaaS) un tema muy importante es el aprovisionamiento (Provisioning) del servicio, es un concepto interesante porque un servicio NECESITA ser escalable y eso solo es posible con sistemas automáticos, por ejemplo en este servicio de hosting todo pasa sin intervención de humanos, creo los sitios, creo las cuentas, facturo, etc., el sistema de aprovisionamiento es clave para el éxito del software que será rentado.  

 

 

Y claro ahora que tengo otras preocupaciones como el espacio que uso y demás empiezo a replantearme la forma como estoy usando otros servicios de la Nube, por ejemplo: a partir de ahora todas las fotos las publicare en flickr.com y solo colocares los apuntadores en mis posts, de pronto es un poco más de trabajo desde Windows Live Writer al momento de publicar, pero seguro vale la pena. Todos los archivos los estoy publicando en skydrive.live.com y todos los videos los voy a poner en Silverlight streaming, de esta forma ahorro montones en ancho de banda, y espacio.

Y claro el toque final es poner todos mis RSS a apuntar a través de feedBurner, para que los que se suscriban al blog no gasten mi precioso ancho de banda.

 

 

Juan Carlos Peláez
Arquitecto de Software

Keywords: Software as a Service, Cloud Computing, Hosting, Juan Peláez, Juan Carlos Peláez, Windows Live Services, Blog, DasBlog.

Monday, July 14, 2008 7:53:00 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Arquitectura | Blog | Gestion de Empresas de Software | IIS7 | SilverLigth | Software as a Service | Windows Live
Le gusta este sitio?
Contácteme
mail: jpelaez at juanpelaez.com
Actualizaciones en Twitter
FeedBurner
Maps
Locations of visitors to this page
Blogroll
[Feed] Eugenio Pace
Arquitecto del grupo Software as a Service en Microsoft
[Feed] Juan Diego Velazco
El mejor diseñador gráfico conocido y un gran tipo
[Feed] Scott Hanselman
Sponsors
Estadísticas
Total Posts: 94
This Year: 4
This Month: 0
This Week: 0
Comments: 42
Archivo
<September 2010>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
Acerca de...

Aviso Legal
Las opiniones expresadas en este sitio representan el punto de vista de Juan Peláez sobre diferentes temas y no representan la posición de 3Metas Corp, Microsoft, Studiocom.com.Inc. o de cualquier otra compañía que haya contratado los servicios de consultoría de Juan Peláez

© Copyright 2010
Juan Carlos Peláez
Sign In

Technorati Profile
All Content © 2010, Juan Carlos Peláez
El tema 'Business' para DasBlog fue creado por Christoph De Baene (delarou) y modificado para español por Juan Peláez
Powered by FeedBurner