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

    Published by emorito on April 13th, 2007 12:33 am under Uncategorized

    No Comments

    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.

  • Leave a comment

    Your email address will not be published.