Orcas & WCF & WF

Como ya todos saben, esta disponible la CTP de Marzo de Orcas (la nueva version de Visual Studio) la cual trae muchas novedades.

Sin embargo la documentacion no es muy abundante que digamos, y menos aun en español.

Pero por suerte, Ezequiel Morito estuvo investigando al respecto, y escribio un post muy interesante, sobre WCF y WF en .NET Framework 3.5 (conocido tambien como Silver).

Una primera mirada a WCF & WF en el .NET Framework 3.5

De lectura obligatoria!.

Saludos!

"Tenant Provisioning" Screencast

Hace unos dias que se publico este nuevo screencast, el segundo de la serie de screencasts sobre LitwareHR / SaaS. El mismo muestra como los tenants ya pueden empezar a probar la aplicacion.

 

Para obtener mas informacion sobre este screencast pueden ver el post de Ariel Schapiro.

Para los que todavia no conocen de que va todo esto de Software as a Service (SaaS), pueden ver este post que hice un tiempo.

Ver el screencast

How-To: Registrando servicios a traves de la configuracion en WCSF

Post original en ingles

Una de las features mas requeridas para Web Client Software Factory es tener la posibilidad de registrar servicios a traves del Web.Config. La registracion de servicios a traves de la configuracion es muy util ya que va permitir cambiar la implementacion de nuestro servicio sin tener que recompilar ninguno de nuestros modulos.

Julián Domínguez y yo estuvimos trabajando sobre este tema, y llegamos a lo que les estoy por contar. Si tienen sugerencias o dudas, dejen un comentario. Su feedback es muy valioso para nosotros.

Como usar la libreria
 

 – Agregar la siguiente configSection a la compositeWeb sectionGroup:

 


<sectionGroup name=»compositeWeb»>
<section name=»services» type=»CompositeWeb.Extensions.Configuration.ServicesConfigurationSection, CompositeWeb.Extensions»/>
<!– Other config sections here –>
</sectionGroup>
– Agregar los servicios que queremos registrar:

 


<compositeWeb>
<modules>
<module name=»Shell» assemblyName=»MyApplication.Modules.Shell» virtualPath=»~/»/>
</modules>
<services>
<service registerAs=»MyInterfaces.IMyService, MyInterfaces» type=»MyImplementations.MyService, MyImplementations»/>
</services>
</compositeWeb>

 


La libreria va a cargar y registrar los servicios antes que de los modulos de nuestra aplicacion se inicialicen.

Nota: La libreria registra los servicios como servicios globales.

Cambios a realizar en nuestra solucion 


Lo unico que hay que hacer es que el Global.asax herede de CompositeWeb.Extensions.CustomWebClientApplication (y agregar la referencia a la libreria) para que la magia se produzca. 

<%@ Application Language=»C#» Inherits=»CompositeWeb.Extensions.CustomWebClientApplication» %>


Codigo Fuente


  • Pueden obtener el codigo fuente del proyecto CompositeWeb.Extensions descargandose el archivo CompositeWeb.Extensions.zip que van a encontrar abajo. Si experimentan problemas al compilar la solucion, asegurence que al referencia al assembly Composite Web Application Block es correcta.
  • Importante: Este codigo se proporciona «como esta» sin ningun tipo de garantia.

Download: CompositeWeb.Extensions.zip

Windows Workflow Foundation Web Workflow Approvals Starter Kit

Les dejo el link para bajarse este nuevo Starter Kit

«This starter kit is a Visual Studio 2005 project that demonstrates using Windows Workflow Foundation for simple task oriented workflow in an ASP.NET web application. A workflow model is used to automate work order requests at a small example company. It includes three pre-defined roles which each play a part in the work order creation, approval and monitoring. The starter kit may be modified for other workflow models to suit other small web based task management systems.»

Download

Smart Client Software Factory: Registrando y Recuperando Servicios

Post original en ingles

Hola, en este post voy a intentar explicarles las diferentes formas que existen en SCSF/CAB para registrar y recuperar servicios. Empezemos 🙂

 SCSF Services


How To: Registrando Servicios

Existen dos formas de implementar la registracion de un servicio.

  • Usando el atributo [Service]

    Este atributo nos indica que nuestra clase va a ser automaticamente registrada como un servicio dentro del root WorkItem de nuestra aplicacion.

    Usage:

    public interface IMyService
    {
        
    int GetSomeData();
    }

    [Service(typeof(IMyService))]
    public class MyService : IMyService
    {
        
    public int GetSomeData()
        {
            
    return 1;
        
    }
    }

    Con el codigo anterior CAB crea una instancia de esta clase y la registra como un servicio durante el inicio de nuestra aplicacion. El parametro del constructor del atributo le esta a diciendo a CAB que key usar para registrar el servicio (para usarla en la localizacion)

  • Usando WorkItem.Services.Add<TService>()

    Ahora bien, si queremos registrar nuestro servicio de una forma mas programatica, lo que tenemos que hacer es llamar al metodo Add o al metodo AddNew de la coleccion de servicios del WorkItem en el que queremos usar el servicio. 

    Usage:

    RootWorkItem.Services.Add<MyService>(myServiceInstance);

    RootWorkItem.Services.AddNew<MyService>();
    RootWorkItem.Services.AddNew<MyService, IMyService>();

    How To: Recuperando servicios

    Ahora que ya tenemos nuestros servicios registrados, lo mas logico es que queramos recuperarlos para poder usarlos. Veamos las dos maneras que hay para realizarlo.

    • Usando el atributo [ServiceDependency]

      Este atributo (que puede ser usando tanto en propiedades como en parametros) indica que esa propiedad o parametro es una dependencia a un servicio y el cual tiene que ser «inyectado» cuando el objeto es agregado a nuestro WorkItem.

      Usage:

      private IMyService myService;

      [ServiceDependency]
      public IMyService MyService
      {
          
      set { myService = value; }
      }

      Con este codigo, CAB tiene claro que estamos teniendo una dependencia con IMyService, la cual ya fue creada y esta disponible para ser usada. Para realizar esto CAB usa Inversion of Control (IoC) / Dependency Injection (DI). Cuando el objeto (por ejemplo una View) es agregado al Workitem, la instancia que corresponda al servicio va a ser inyectada en nuestra propiedad o parametro.

    • Usando WorkItem.Services.Get<TService>()

    Por este camino la recuperacion del servicio es mas bajo demanda que usando el atributo [ServiceDependency].

    Imaginemos que tenemos un segundo servicio llamado AnotherService que implementa la interface IAnotherService a la cual decoramos con el atributo [Service].

    En nuestra View, no vamos a crear un propiedad para acceder a nuestro servicio, por lo tanto no vamos a estar usando el atributo [ServiceDependency].

    Usage: (por ejemplo en un metodo)

    public void MyMethod()
    {
        IAnotherService mySecondService 
    rootWorkItem.Services.Get<IAnotherService>();
        
        
    // …
    }

    Aclaremos que el atributo [ServiceDependency] no hace magia, sino que «behind the scenes» o en criollo por abajo, esta llamando a Services.Get.

    Espero que esta guia les sea util.

  • LitwareHR -> Ahora disponible para XP

    LitwareHR
    Hace unos dias les hable de SaaS y de LitwareHR (pueden leer este post si se lo perdieron), y como habran visto si es que bajaron la aplicacion, la misma se tenia que ejecutar en Windows 2003.


    Pero la comunidad se hizo escuchar :), y ahora tenemos un instalador de LitwareHR para poder correr LitwareHR en XP.


    En este postAriel Schapiro nos cuenta con mas detalles cuales fueron los cambios que se realizaron, y a su vez nos deja un link con una guia para hacer funcionar LitwareHR en Windows Vista.


    Espero que les sirva y que se animen a usar LitwareHR.


     


    Download LitwareHR XP