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

Hola muchachos!!!, estuve investigando acerca de que trae de nuevo WCF y WF en el .NET Framework 3.5. En base a eso desarrolle un simple ejemplo con el Orcas March CTP, el conocidisimo HelloWorld. En este post voy a tratar de darles una primera mirada a WCF & WF en el .NET Framework 3.5 (a.k.a Silver) con este sencillo ejemplo.

Estos son los pasos para desarrollar la aplicacion de ejemplo, HelloWorld:

  1. Crear un proyecto WCF Service Library.
    • Este es el project template para hostear el servicio WCF en la aplicacion WCF Service Host, esta hostea todos los servicios que se configuren en el App.config del servicio. 
    • Este es el service contract:
      using System;
      using System.Collections.Generic;
      using System.Text;
      using System.ServiceModel;
      
      namespace HelloWorldService
      {
          [ServiceContract()]
          public interface IHelloService
          {
              [OperationContract()]
              string GetHelloWorld();
          }
      }

    • y esta la implementacion del servicio:
      using System;
      using System.Collections.Generic;
      using System.Text;
      
      namespace HelloWorldService
      {
          public class HelloService : IHelloService
          {
              #region IHello Members
      
              public string GetHelloWorld()
              {
                  return "Hello,
                      World!";
              }
      
              #endregion
          }
      }

  2. Crear un proyecto Sequential Workflow Console Application.
    • Este proyecto es el cliente que contiene el Sequential Workflow, HelloWorldWorkflow.

  3. Crear el App.Config:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.serviceModel>
            <client>
                <endpoint address="http://localhost:8008/hello"
                    binding="wsHttpBinding"
                    bindingConfiguration=""
                    contract="HelloWorldService.IHelloService"
                    name="EndPointHelloWorld" />
            </client>
        </system.serviceModel>
    </configuration>

  4. Agregar una SendActivity al HelloWorldWorkflow.
    • SendActivity se utiliza para enviar y para recibir un mensaje a traves de un endpoint de WCF. Su uso es bastante directo.
    • Agreguen una SendActivity al HelloWorldWorkflow y denle una mirada a las Propiedades de esta activity.  
      • Primero seteamos la propiedad ServiceOperationInfo. Para ello le damos click sobre las ellipsis (…) y se abre la ventana Choose Operation. Presionamos sobre Import para importar el service contract HelloWorldService.IHelloService.
      • Seleccionamos el metodo GetHelloWorld para terminar de setear la propiedad ServiceOperationInfo.
      • Luego de setear la propiedad ServiceOperationInfo, aparecera la propiedad Return, esta es una propiedad Binding y debemos setearla con un Dependency Property. Para ello le damos click sobre las ellipsis (…) y seleccionamos Bind to new member en la ventana que se abre. Aca creamos una nueva dependency property, a la cual llamamos Answer.
      • Por ultimo seteamos la propiedad EndPoint, utilizando los endpoints que configuramos en el App.config.
        • ConfigurationName: EndPointHelloWorld
        • OwnerActivityName: EndPointHelloWorld
    • Finalmente, para mostrar los resultados, agregamos un  Code activity al HelloWorldWorkflow. Hacemos doble click sobre la Code activity y pegamos el siguiente codigo:
      private void codeActivity1_ExecuteCode(object sender, EventArgs e)
      {
             Console.WriteLine(Answer);
             Console.Read();
      }

  5. Para terminar con este ejemplo, necesitamos resolver algunos problemas que tiene Orcas:
    • WF Project templates tiene mal seteado la version del framework; Esto genera, que al intentar utilizar assemblies mayores que 3.0.0.0, el proyecto falle.
      • Solution: click derecho sobre el proyecto, seleccionamos properties, y cambiamos la version del framework a 3.5.0.0
    • Un ServiceHost no lee las settings porque el App.config no se copia a la carpeta Bin, (solamente sobre Windows Server 2003):  Esto genera que al correr la aplicacion, nos tire la siguiente exception "no application endpoints can be found"
      • Solution: agregar el siguiente Post Build Event "copy “$(ProjectDir)\app.config” $(TargetName).config "

Bueno, esta fue una primera mirada a WCF & WF en el .NET Framework 3.5. Espero que les haya gustado :-)

Aca les dejo el codigo.

Posted in Uncategorized.

Leave a Reply