Compartir a través de


Integración de COM+: hospedado en Web

Download sample

Este ejemplo muestra cómo exponer una interfaz de una aplicación COM+ como un servicio Windows Communication Foundation (WCF) y cómo llamarlo desde un cliente WCF. Este ejemplo está compuesto de un programa (.exe) de consola de cliente y una aplicación (.dll) de biblioteca de Enterprise Services registrados dentro de COM+.

Nota

Las instrucciones de compilación y el procedimiento de instalación de este ejemplo se encuentran al final de este tema.

Nota

La versión Visual Basic de este ejemplo se debe configurar como una aplicación de servidor y hospedar fuera del proceso para ejecutarse en las ediciones de 64 bits del sistema operativo Windows. Para obtener más detalles sobre cómo configurar el ejemplo como una aplicación de servidor, vea las aplicaciones de configuración de COM+.

La aplicación Enterprise Services contiene un componente único que implementa una interfaz ICalculator única que expone métodos matemáticos (Sumar, Restar, Multiplicar y Dividir).

// Define the component's interface.
public interface ICalculator
{
    double Add(double n1, double n2);
    double Subtract(double n1, double n2);
    double Multiply(double n1, double n2);
    double Divide(double n1, double n2);
}

Esta interfaz se expone como un contrato de servicios que define un modelo de comunicación de respuesta a solicitudes. El cliente realiza solicitudes sincrónicas a una operación matemática y el servicio y el componente subyacente responden con el resultado. La actividad del cliente es visible en la ventana de la consola.

El servicio se hospeda en proceso por Internet Information Services (IIS) y es activado por el primer mensaje enviado al servicio. La implementación de la clase ESCalculatorServicecalcula y devuelve el resultado adecuado.

// Supporting implementation for the ICalculator interface.
public class ESCalculatorService : ServicedComponent, ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

Nota

La clase no incluye ningún código específico de ServiceModel y es un ensamblado Enterprise Services típico que se atribuye con atributos Enterprise Services, firmado y agregado a la Caché de Ensamblados Global (GAC).

COM+ Service Model Configuration Tool (ComSvcConfig.exe) se utiliza para agregar un servicio de apoyo para la interfaz seleccionada. Se utiliza la siguiente sintaxis para realizar esto.

ComSvcConfig.exe /install /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator hosting:was /webDirectory:ServiceModelSamples /mex /verbose

En este caso, la herramienta agrega un servicio para la interfaz ICalculator del componente ServiceModelSample.ESCalculator, que está dentro de la aplicación ServiceModelSample. IIS hospeda el servicio dentro del directorio virtual de ServiceModelSample. El servicio agregado expone un extremo único para comunicar con el servicio. De forma predeterminada, la dirección del extremo para comunicar con el servicio se construye desde el ProgID del componente (es decir, https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc), aunque esta dirección de extremo del servicio se puede modificar cambiando el nombre del archivo de servicio .svc. La herramienta agrega la configuración para el enlace del servicio con el archivo Web.config. La configuración para el enlace del servicio tiene los valores predeterminados de un enlace estándarwsHttpBinding, que proporciona comunicaciones HTTP utilizando SOAP 1.2 y normas de los servicios Web para direccionar y seguridad.

La herramienta también expone un extremo de intercambio (MEX) de metadatos en https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex, así como la capacidad de tener acceso a los metadatos del WSDL desde un explorador a través de HTTP GET en https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc? wsdl. Estas características de metadatos pueden deshabilitarse omitiendo la opción de herramienta /mex.

El contrato de servicios se deriva directamente de la interfaz ICalculator y es equivalente a la siguiente definición de ServiceContract.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

El cliente comunica en un contrato utilizando un cliente que es generado por Service Metadata Utility Tool (Svcutil.exe). El cliente está contenido en el archivo generatedClient.cs. Esta utilidad recupera los metadatos para un servicio y genera un cliente utilizado para comunicar en un tipo de contrato. El servicio hospedado debe estar disponible para generar el código proxy, porque se utiliza para recuperar los metadatos actualizados. Ejecute el comando siguiente desde un símbolo del sistema en el directorio cliente para generar el proxy con tipo:

svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex /out:generatedClient.cs

Dado el cliente generado para comunicar en un contrato determinado, el cliente puede tener acceso a un extremo de servicio determinado configurando la dirección y enlace adecuados. Como el servicio, el cliente utiliza un archivo de configuración (App.config) para especificar el extremo con el que se comunica . La configuración de extremo de cliente está compuesta por un nombre de configuración, una dirección absoluta para el extremo de servicio, el enlace y el contrato.

<system.serviceModel>
  <client>
    <endpoint
      address="https://localhost/ServiceModelSamples/servicemodelsample.escalculator.svc/ICalculator" 
      binding="wsHttpBinding" 
      bindingConfiguration="comNonTransactionalBinding" 
      contract="ICalculator" />
  </client>
  <bindings>
    <wsHttpBinding>
          <binding name="comNonTransactionalBinding" >
        <reliableSession enabled="true"/>
      </binding>
    </wsHttpBinding>
  </bindings>
</system.serviceModel>

La implementación del cliente crea una instancia del cliente generado. En ese momento se puede utilizar para iniciar la comunicación con el servicio.

// Create a client.
CalculatorClient client = new CalculatorClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client gracefully closes the connection and cleans up resources.
client.Close();

Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. Esto muestra el uso del servicio WCF generado de un cliente WCF. Presione Entrar en la ventana de cliente para cerrar el cliente.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Para configurar y generar el ejemplo

  1. Asegúrese de que ha realizado Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para generar la edición de la solución en código C# o Visual Basic .NET , siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.

  3. Asegúrese de que \InetPub\wwwroot\ServiceModelSamples y su subdirectorio bin están vacíos.

  4. A través de un símbolo del sistema, navegue hasta la carpeta service\bin del ejemplo. Si usa Windows Vista o Windows Server 2008, asegúrese de que ejecuta el símbolo del sistema como Administrador.

  5. Escriba gacutil.exe /i ESCalculator.dll para agregar el ensamblado a la Caché de Ensamblados Global. Asegúrese de que Gacutil.exe está en su ruta de acceso.

  6. Escriba regsvcs.exe ESCalculator.dll para registrar el componente del ensamblado y la aplicación ServiceModelSample con COM+. Asegúrese de que Regsvcs.exe está en su ruta de acceso.

  7. Escriba ComSvcConfig.exe /instale /aplicación: ServiceModelSample /contrato: "ServiceModelSample.ESCalculator, ICalculator" /hospedando: fue /webDirectory: ServiceModelSamples /mex /detallado para exponer la interfaz como un servicio hospedado en IIS.

    Asegúrese de que ComSvcConfig.exe está en su ruta de acceso.

Para ejecutar el ejemplo en el mismo equipo

  1. Asegúrese de que puede tener acceso a los servicios utilizando un explorador escribiendo la dirección siguiente: https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc. Como respuesta se debe mostrar una página de confirmación.

  2. Ejecute Client.exe desde \client\bin\, desde la carpeta específica del lenguaje. La actividad del cliente se muestra en la ventana de consola del cliente.

  3. Si el cliente y el servicio no se pueden comunicar, consulte Sugerencias para la solución de problemas.

    Nota

    El ejemplo genera un programa cliente de aplicación de consola. Deberá iniciarlo mediante el símbolo del sistema para ver el resultado.

Para ejecutar el ejemplo en varios equipos

  1. En el equipo del servicio, cree un directorio virtual denominado ServiceModelSamples. El script Setupvroot.bat incluido con Instrucciones de configuración del directorio virtual se puede utilizar para crear el directorio de disco y el directorio virtual.

  2. Copie el archivo ESCalculator.dll del directorio service\bin en un directorio en el equipo del servicio.

  3. De un símbolo del sistema, navegue a ese directorio de destino en el equipo del servicio. Si usa Windows Vista o Windows Server 2008, asegúrese de que ejecuta el símbolo del sistema como Administrador.

  4. Escriba gacutil.exe /i ESCalculator.dll en el equipo del servicio para agregar el ensamblado a la Caché de Ensamblados Global.

  5. Escriba regsvcs.exe ESCalculator.dll en el equipo del servicio para registrar el componente del ensamblado y la aplicación ServiceModelSample con COM+.

  6. Escriba ComSvcConfig.exe /install /application:ServiceModelSample /contract: "ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose en el equipo del servicio para exponer el contrato como un servicio hospedado en IIS.

  7. Copie los archivos de programa del cliente de la carpeta \client\bin\, bajo la carpeta específica del lenguaje, al equipo del cliente.

  8. En el archivo de configuración del cliente, cambie el valor de la dirección de la definición del extremo para que coincida con la nueva dirección de su servicio. Reemplace cualquier referencia al "localhost" con un nombre de dominio completo en la dirección.

  9. Asegúrese de que puede tener acceso al servicio desde el equipo cliente utilizando un explorador.

  10. En el equipo cliente, inicie Client.exe desde el símbolo del sistema.

Para limpiar después del ejemplo

  1. Si usa Windows Vista o Windows Server 2008, asegúrese de que ejecuta el símbolo del sistema como Administrador. Escriba ComSvcConfig.exe /u /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator para desinstalar la integración de COM+.

  2. Escriba regsvcs.exe /u ESCalculator.dll para desinstalar la aplicación de COM+.

  3. Escriba gacutil.exe /u ESCalculator para quitar el componente de la Caché de Ensamblados Global.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.