Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS)

by Nicolás Ferreira 10. January 2009 00:00

Existe un error (o al menos existió al momento de escribir este artículo). Si alojamos el servicio en "Windows Process Activation Services" utilizando el protocolo "net.tcp" y el nombre del equipo contiene caracteres no-ASCII, no seremos capaces de establecer la conexión con el servicio.

Para poner en funcionamiento un servicio "Windows Communication Foundation (WCF)" hay que alojarlo. Podemos alojar los servicios en:
- Aplicaciones Windows Forms/WPF
- Aplicaciones consola
- Servicios de Windows
- Internet Information Services
- Windows Process Activation Services (WAS)

"Windows Process Activation Services" no es nuevo. De hecho fue introducido por primera vez en "Windows Vista", está presente en "Windows Server 2008" y continúa en "Windows 7".
"Windows Process Activation Services" puede ser una buena opción si pensamos en correr servicios "Windows Communication Foundation" en dichos sistemas operativos.

Crear el servicio "Windows Communication Foundation"

1 – Abrimos "Visual Studio" y elegimos crear un proyecto de tipo "WCF Service Library". De nombre le ponemos "ServicioHolaMundo". Una vez creado el proyecto, borramos los archivos "IService1.cs" y "Service1.cs" que "Visual Studio" crea por defecto.

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Crear proyecto

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Borrar archivos

2 – Tenemos que crear un contrato (interfaz). Para esto, en el explorador de solución hacemos clic derecho sobre "ServicioHolaMundo" y elegimos "Add" -> "New Item...". Una vez abierto "Add New Item" elegimos "Interface" y de nombre le ponemos "IServicioHolaMundo.cs". Hacemos clic en "Add".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Crear interfaz (Paso 1)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Crear interfaz (Paso 2)

3 – Dejamos la interfaz así:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace NicolasFerreira.Servicios
{
    [ServiceContract(Name = "ServicioHolaMundo",
    Namespace = "http://nicolasferreira.com/2009/01/09")]
    public interface IServicioHolaMundo
    {
        [OperationContract()]
        string HolaMundo();
    }
}

4 – Tenemos que crear una clase (la implementación del contrato) que implemente la interfaz "IServicioHolaMundo". Para esto, en el explorador de solución hacemos clic derecho sobre "ServicioHolaMundo" y elegimos "Add" -> "New Item...". Una vez abierto "Add New Item" elegimos "Class" y de nombre le ponemos "ServicioHolaMundo.cs". Hacemos clic en "Add".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Crear clase

5 – Dejamos la clase así:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NicolasFerreira.Servicios
{
    public class ServicioHolaMundo : IServicioHolaMundo
    {
        #region IServicioHolaMundo Members

        public string HolaMundo()
        {
            return "¡Hola mundo!";
        }

        #endregion
    }
}

6 – En el explorador de solución y bajo el proyecto "ServicioHolaMundo" buscamos el archivo "App.config". Hacemos clic derecho sobre él y elegimos la opción "Edit WCF configuration". Aparecerá la aplicación "Microsoft Service Configuration Editor". En el panel "Configuration" bajo la carpeta "Services" seleccionamos "ServicioHolaMundo.Service1". Cambiamos el valor de la propiedad "Name" por "NicolasFerreira.Servicios.ServicioHolaMundo".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Editar configuración WCF (Paso 1)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Editar configuración WCF (Paso 2)

7 – Expandir las siguientes carpetas: "NicolasFerreira.Servicios.ServicioHolaMundo" -> "Endpoints" hasta ver dos "Endpoints" que no tienen nombre: "(Empty Name)". Hacemos clic sobre el primero. Podemos ver que el valor de la propiedad "Binding" es "wsHttpBinding". Lo cambiamos a "netTcpBinding". El valor de la propiedad "Contract" es "ServicioHolaMundo.IService1". Lo cambiamos a "NicolasFerreira.Servicios.IServicioHolaMundo". Ahora hacemos clic sobre el segundo "Endpoint". Podemos ver que el valor de la propiedad "Binding" es "mexHttpBinding". Lo cambiamos a "mexTcpBinding".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Configurar Endpoints (Paso 1)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Configurar Endpoints (Paso 2)

8 – Expandir las siguientes carpetas: "Advanced" -> "Service Behaviors" -> "ServicioHolaMundo.Service1Behavior" hasta ver "serviceMetadata". Seleccionamos "serviceMetadata" y cambiamos el valor de la propiedad "HttpGetEnabled" a "False".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Configurar serviceMetadata

9 – Cerramos la aplicación y cuando nos pregunte si queremos guardar los cambios le decimos que sí.

10 – Por último agregamos un archivo llamado "ServicioHolaMundo.svc" al proyecto.

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Agregar ServicioHolaMundo.svc

11 – Lo dejamos así:

<%@ ServiceHost Language="C#" Service="NicolasFerreira.Servicios.ServicioHolaMundo" %>

12 – Compilamos la solución y cerramos "Visual Studio".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Compilar solución

Instalar y configurar "Windows Process Activation Services" para alojar el servicio

1 – En "Windows 7" vamos a "Control Panel". Una vez que estemos ahí, hacemos clic sobre el vínculo "Programs" y después bajo "Programs and Features" hacemos clic en el vínculo "Turn Windows features on or off". Cuando aparezca el cuadro "Windows Features" marcamos las siguientes opciones:

- "IIS Management Console" que se encuentra en: "Internet Information Services" -> "Web Management Tools".
- ".NET Extensibility" que se encuentra en: "Internet Information Services" -> "World Wide Web Services" -> "Application Development Features".
- "Windows Communication Foundation Non-HTTP Activation" que se encuentra en: "Microsoft .NET Framework 3.5.1"

Finalmente hacemos clic en "OK".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Control Panel

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Programs

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Turn Windows features on or off

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Windows Features

2 – Volvemos a "Control Panel" pero esta vez hacemos clic sobre el vínculo "All Control Panel Items" para así poder ir a "Administrative Tools" y elegir "Internet Information Services (IIS) Manager".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): All Control Panel Items

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Administrative Tools

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): IIS Manager

3 – Por defecto en "Windows 7" ya vienen configurados algunos "Bindings" para el sitio "Default Web Site". Esto lo comprobamos expandiendo el nombre del equipo, luego "Sites" y luego eligiendo "Default Web Site". Si hacemos clic en "Bindings..." veremos lo siguiente:

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Default Web Site

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Site Bindings

4 – Para este ejemplo utilizaremos la configuración por defecto (el protocolo "net.tcp" y el puerto "808").
5 – Hacemos clic derecho sobre "Default Web Site" y seleccionamos la opción "Add Application...". En "Alias" escribimos "ServicioHolaMundo" y en "Physical path" escribimos "C:\inetpub\wwwroot\ServicioHolaMundo" (previamente hay que crear la carpeta "ServicioHolaMundo" en "C:\inetpub\wwwroot"). Hacemos clic en "OK".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Add Application (Paso 1)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Add Application (Paso 2)

6 – Una vez que hicimos clic en "OK", quedará seleccionada la aplicacion que acabamos de crear. En el panel "Actions" hacemos clic en la opción "Advanced Settings...". Aparecerá el cuadro "Advanced Settings". El valor de la propiedad "Enabled Protocols" es "http". Lo cambiamos por "net.tcp", hacemos clic en "OK" y cerramos "Internet Information Services (IIS) Manager".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Advanced Settings

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS): Enabled Protocols

7 – Vamos a la carpeta "C:\inetpub\wwwroot\ServicioHolaMundo" y pegamos los archivos "ServicioHolaMundo.svc" y "app.config". Renombramos el archivo "app.config" por "Web.config". Creamos una carpeta con el nombre de "Bin" y le pegamos el archivo "ServicioHolaMundo.dll".

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS)

Probar el servicio

1 – Podemos probar lo que hemos hecho yendo a Visual Studio, creando un proyecto de tipo aplicación consola y agregando una referencia al servicio.

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS) : Add Service Reference (Paso 1)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS) : Add Service Reference (Paso 2)

Alojar un servicio Windows Communication Foundation en Windows 7 utilizando Windows Process Activation Services (WAS)

Won’t you pour me a Cuban breeze Gretchen

Tags:

.NET Development | Windows Communication Foundation (WCF)