Perfil de GabrielBiztalk Blandengue (http...FotosBlogListasMais ![]() | Ajuda |
|
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
|
|
|