Perfil de GabrielBiztalk Blandengue (http...FotosBlogListasMais Ferramentas Ajuda

Blog


2/7/2006

Hosteando WCF directamente en COM+ para exponer clases en Enterprise Services

Hosteando WCF directamente en COM+ para exponer clases en Enterprise Services
 
Un posible host de WCF es el propio servicio de Enterprise Services. Sin embargo, sin tener en cuenta un conjunto de detalles, hacer que funcione en la Beta 2 no es tan simple con los ejemplos que andan por la vuelta.
El ejemplo en esta entrada funciona con la Beta 2.
 
Paso 1: Instalar el update para WCF que está aquí
 
IMPORTANTE: Si no instalás el update no te va a funcionar.
 
Paso 2: Bajar los fuentes que están aquí:
 
Abrir la solución en Visual Studio y compilar todo.
La solución consta de dos proyectos:
 
Servidor: La clase EsHosting es una clase que deriva de ServicedComponent y, por lo tanto puede catalogarse en Enterprise Services
Por una parte tiene una interfaz IManejoString que define la interfaz del servicio y en la misma clase la implementación en la clase ServicioManejoString.
Es una clase muy simple cuya única particularidad es la especificación detallada de las características de la aplicación y la clase para EnterpriseServices.
 
Cliente: Es una aplicación de consola que utiliza un Proxy generado con svcutil.exe a partir del servicio corriendo y simplemente crea una instancia del proxy y se conecta a los puntos de entrada a través del mismo. En el app.config está configurado para utilizar el punto de entrada tcp del servicio expuesto.

Paso 3: Instalar la aplicación en Enterprise Services

Catalogar EsHosting.dll en la GAC: En el directorio de la aplicación servidor EsHosting correr gacutil /i EsHosting.dll

Y luego Catalogarlo en Enterprise Services corriendo regsvcs EsHosting.dll

Debería tener una salida como debajo

Microsoft (R) .NET Framework Services Installation Utility Version 2.0.50727.42

Copyright (c) Microsoft Corporation.  All rights reserved.

 

Installed Assembly:

        Assembly: C:\Gabriel\Bps\EvolucionPersonas\EsHosting\EsHosting\bin\Debug

\EsHosting.dll

        Application: EjemploHostingES

        TypeLib: C:\Gabriel\Bps\EvolucionPersonas\EsHosting\EsHosting\bin\Debug\

EsHosting.tlb

 

Y luego Catalogarlo en Enterprise Services corriendo regsvcs EsHosting.dll

Una vez hecho esto, reconfigurar la aplicación en la MMC de COM+ seteando el Server Process ShutDown del tab Advanced a “Leave running when idle”.

Dependiendo de la configuración de seguridad del equipo puede ser necesario desmarcar (para una prueba simple) el “Enforce access checks for this application” del tab Security.

Paso 4: Configurar el servicio con el Editor de Configuracion.

Iniciar el Microsoft Service Configuration Editor que está dentro de las Tools del SDK.

Ir a File / Integrate / COM+ Application

Seleccionar la Interfaz IManejoString cuando el Wizard pide la selección de la interfaz.

Seleccionar los dos métodos y luego en el hosting mode seleccionar COM+.

En el transporte seleccionar TCP y en el address digitar net.tcp://localhost/EjemploHostingES/EjemploHostingES.ManejoString/IManejoString

Dar Next y luego Finish

Luego ir al directorio c:\Program Files\ComPlus Applications\{ca9e2aa1-e53c-439f-bcbf-8b54bf1d10fc} y editar con Notepad el archivo application.config.

Borrar todo lo que hay dentro de los tag <behaviors></behaviors>

Cambiar los tags  <netNamedPipeBinding> por <netTcpBinding>

Quitar la propiedad behaviorConfiguration del apartado <service>

Quitar la propiedad listenUri del apartado <endpoint>

 

Hecho esto volvemos a abrir el Microsoft Service Configuration Editor y con File / Open / COM+ Service seleccionamos EjemploHostingES.

Dentro de Services donde está la rama del árbol (Empty Name) cambiamos el Binding Configuration a comNonTransactionalBinding y salvamos la configuración.

El archivo application.config debería quedar como se ve debajo

 

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <system.serviceModel>

        <behaviors>

        </behaviors>

        <bindings>

            <netTcpBinding>

                <binding name="comNonTransactionalBinding" />

                <binding name="comTransactionalBinding" transactionFlow="true" />

                <binding name="comMexBinding" />

            </netTcpBinding>

        </bindings>

        <comContracts>

            <comContract contract="{5625929C-96C0-4ABB-9662-40C5E9A4773A}"

                name="IManejoString" namespace="http://tempuri.org/5625929C-96C0-4ABB-9662-40C5E9A4773A">

                <exposedMethods>

                    <add exposedMethod="Concatenar" />

                    <add exposedMethod="Saludar" />

                </exposedMethods>

            </comContract>

        </comContracts>

        <services>

            <service name="{CA9E2AA1-E53C-439F-BCBF-8B54BF1D10FC},{617F0F93-00AF-400D-95F9-BE563958ED0F}">

                <clear />

                <endpoint address="net.tcp://localhost/EjemploHostingES/EjemploHostingES.ManejoString/IManejoString"

                    binding="netTcpBinding" bindingConfiguration="comNonTransactionalBinding"

                    contract="{5625929C-96C0-4ABB-9662-40C5E9A4773A}" />

            </service>

        </services>

    </system.serviceModel>

</configuration>

Usando la consola MMC de COM+ dar Start a la aplicación y en running Processes debería aparece el componente corriendo.

 

Paso 5: Probar la ejecucion.

Dar F5 en el proyecto y debe aparecer una consola de windows con la informacion siguiente:

 

Hola  Gabriel Cor

Junto esto  con esto

<ENTER> para terminar