Compartir a través de


Procedimiento para registrar y configurar un moniker de servicio

Antes de utilizar el moniker de servicio de Windows Communication Foundation (WCF) en una aplicación COM con un contrato con tipo, debe registrar los tipos con atributos necesarios en COM y configurar la aplicación COM y el moniker con la configuración de enlace necesaria.

Registro de los tipos con atributos necesarios en COM

  1. Use la herramienta ServiceModel Metadata Utility Tool (Svcutil.exe) para recuperar el contrato de metadatos del servicio WCF. Así se genera el código fuente para un ensamblado de cliente WCF y un archivo de configuración de la aplicación cliente.

  2. Asegúrese de que los tipos del ensamblado se marcan como ComVisible. Para ello, agregue el siguiente atributo al archivo AssemblyInfo.cs de su proyecto de Visual Studio.

    [assembly: ComVisible(true)]
    
  3. Compile el cliente WCF administrado como un ensamblado con nombre seguro. Para ello se es necesario firmar con un par de claves criptográficas. Para obtener más información, vea Procedimiento para firmar un ensamblado con un nombre seguro.

  4. Utilice la herramienta de registro de ensamblados (Regasm.exe) con la opción -tlb para registrar los tipos del ensamblado en COM.

  5. Use la herramienta de la caché global de ensamblados (Gacutil.exe) para agregar el ensamblado a la caché global de ensamblados.

    Nota

    Firmar y agregar el ensamblado a la caché global de ensamblados son pasos opcionales, pero permiten simplificar el proceso de cargar el ensamblado desde la ubicación correcta en tiempo de ejecución.

Configuración de la aplicación COM y el moniker con la configuración de enlace necesaria

  • Coloque las definiciones de enlace (generadas por la herramienta ServiceModel Metadata Utility Tool (Svcutil.exe) en el archivo de configuración de la aplicación cliente generada) en el archivo de configuración de la aplicación cliente. Por ejemplo, para un ejecutable de Visual Basic 6.0 denominado CallCenterClient.exe, la configuración debe encontrarse en un archivo denominado CallCenterConfig.exe.config en el mismo directorio que la aplicación ejecutable. De este modo la aplicación cliente puede utilizar el moniker. Tenga en cuenta que la configuración de enlace no es necesaria si utiliza uno de los tipos de enlace estándar proporcionados por WCF.

    El siguiente tipo está registrado:

    using System.ServiceModel;
    
    [ServiceContract]
    public interface IMathService
    {
        [OperationContract]
        public int Add(int x, int y);
        [OperationContract]
        public int Subtract(int x, int y);
    }
    

    La aplicación se expone mediante un enlace wsHttpBinding. Para el tipo y configuración de aplicación especificados, se utilizan las siguientes cadenas moniker de ejemplo.

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
    

    o

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
    

    Puede utilizar cualquiera de estas cadenas moniker desde una aplicación de Visual Basic 6.0, siempre que agregue una referencia al ensamblado que contiene los tipos IMathService, como se muestra en el siguiente código de ejemplo.

    Dim mathProxy As IMathService
    Dim result As Integer
    
    Set mathProxy = GetObject( _
            "service4:address=http://localhost/MathService, _
            binding=wsHttpBinding, _
            bindingConfiguration=Binding1")
    
    result = mathProxy.Add(3, 5)
    

    En este ejemplo, la definición de la configuración de enlace Binding1 se almacena en un archivo de configuración con un nombre adecuado, por ejemplo vb6appname.exe.config.

    Nota

    Puede utilizar un código similar en una aplicación C#, C++, o cualquier otra aplicación de lenguaje .NET.

    Nota

    Si el moniker no tiene el formato correcto o el servicio no está disponible, la llamada a GetObject devolverá el error "Sintaxis no válida". Si recibe este error, asegúrese de que el moniker que está utilizando es correcto y el servicio está disponible.

    Aunque este tema se centra en el uso del moniker de servicio desde el código de Visual Basic 6.0, puede usar un moniker de servicio de otros lenguajes. Si utiliza un moniker del código de C++, deberá importar el ensamblado generado por Svcutil.exe con "no_namespace named_guids raw_interfaces_only", como se muestra en el siguiente código.

    #import "ComTestProxy.tlb" no_namespace named_guids
    

    De este modo se modifican las definiciones de la interfaz importada para que todos los métodos devuelvan HResult. Cualquier otro valor devuelto se convierte en parámetros de salida. La ejecución global de los métodos sigue siendo la misma. Esto permite determinar la causa de una excepción al llamar a un método en el proxy. Esta funcionalidad sólo está disponible en el código de C++.

Consulte también