Compartir a través de


Creación manual de un proxy de servicio para un servicio WCF

La manera más fácil de crear un proxy de servicio de cliente para un servicio de Windows Communication Foundation (WCF) está en el nivel modelo de servicio con la herramienta WsUtil, como se describe en el tema Creación de un cliente . Sin embargo, si es necesario, también puede crear manualmente un proxy de servicio. Esta API incluye una función WsCreateServiceProxy para crear el proxy de servicio, así como estructuras, enumeraciones, etc. para establecer las propiedades necesarias para interoperar con WCF.

WCF proporciona una serie de enlaces estándar, cada uno de los cuales tiene como destino un escenario de uso específico. El enlace del servicio al que intenta conectarse a los usos, a su vez, determina qué propiedades de canal necesita personalizar para que el proxy de servicio se comunique con el servicio.

Creación de un proxy de servicio para WSHttpBinding de WCF

WSHttpBinding es para el escenario de servicios web de Internet de línea principal. Usa la versión 1.2 más reciente de SOAP y WS-Addressing versión 1.0 y habilita una amplia gama de configuraciones de seguridad a través de los transportes HTTP y HTTPS públicos. WWSAPI no tiene un equivalente a WSHttpBinding (o cualquiera de los enlaces estándar wcF, por ese motivo), pero desde su versión SOAP predeterminada, WS-Addressing versión y formato de codificación coinciden con los de WSHttpBinding, la creación de un proxy de servicio para un servicio que usa WSHttpBinding es sencillo. Por ejemplo, para crear un proxy de servicio para comunicarse con un punto de conexión WSHttpBinding sin seguridad, simplemente puede usar código como el siguiente fragmento de código (se omiten la declaración de variables y el montón y la creación de errores). Observe que no se especifican propiedades de canal ni descripción de seguridad en la llamada a la función WsCreateServiceProxy .

// Create the proxy

hr = WsCreateServiceProxy(
        WS_CHANNEL_TYPE_REQUEST, 
        WS_HTTP_CHANNEL_BINDING, 
        NULL, // security description
        NULL, // proxy properties
        0, // proxy property count
        NULL, // channel properties
        0, // channel property count
        &proxy, 
        error);

La función crea el proxy de servicio y devuelve un puntero al mismo en el parámetro serviceProxy (&proxy en la llamada de función anterior).

Creación de un proxy de servicio para BasicHttpBinding de WCF

Cuando se crea manualmente un proxy de servicio para un servicio WCF que usa un enlace BasicHttpBinding, es necesario establecer la versión SOAP y WS-Addressing propiedades del canal. Esto se debe a que WWSAPI tiene como valor predeterminado SOAP versión 1.2 y WS-Addressing 1.0. BasicHttpBinding de WCF, por otro lado, usa soap versión 1.1 y sin direccionamiento WS.

Para establecer la versión soap y WS-Addrssing propiedades del canal, declare una matriz de estructuras de WS_CHANNEL_PROPERTY para contener las propiedades del canal y la información relacionada.

WS_CHANNEL_PROPERTY channelProperties[4]; // Array to hold up to 4 channel properties

ULONG channelPropertyCount = 0; // Count of properties set
 
WS_ENVELOPE_VERSION soapVersion = WS_ENVELOPE_VERSION_SOAP_1_1; // Set required SOAP version
channelProperties[channelPropertyCount].id = WS_CHANNEL_PROPERTY_ENVELOPE_VERSION; // Type of first channel property
channelProperties[channelPropertyCount].value = &soapVersion; // Address of the SOAP version value
channelProperties[channelPropertyCount].valueSize = sizeof(soapVersion); // Size of the value
channelPropertyCount++; // Increment property count
 
WS_ADDRESSING_VERSION addressingVersion = WS_ADDRESSING_VERSION_TRANSPORT; // Set required WS-Addressing value
channelProperties[channelPropertyCount].id = WS_CHANNEL_PROPERTY_ADDRESSING_VERSION; // Type of second channel property
channelProperties[channelPropertyCount].value = &addressingVersion ; // Address of the WS-Addressing value
channelProperties[channelPropertyCount].valueSize = sizeof(addressingVersion ); // Size of the value
channelPropertyCount++; // Increment property count
 
// add more channel properties here

A continuación, pase la matriz de propiedades de canal (channelProperties) y el recuento de propiedades (channelPropertyCount) a WsCreateServiceProxy (o WsCreateChannel si está trabajando en la capa de canal).

// Create the proxy

hr = WsCreateServiceProxy(
        WS_CHANNEL_TYPE_REQUEST, 
        WS_HTTP_CHANNEL_BINDING, 
        NULL, // security description
        NULL, // proxy properties
        0, // proxy property count
        channelProperties, // channel properties
        channelPropertyCount, // channel property count
        &proxy, 
        error);

La matriz declarada para contener las propiedades se copia en WsCreateServiceProxy y, como resultado, puede liberar la memoria de la matriz de propiedades inmediatamente después de llamar a la función. Además, si asigna la memoria de la pila (como el fragmento de código anterior), también puede devolver desde la función inmediatamente después de la llamada.

Otros enlaces

Además, WWSAPI proporciona mecanismos para crear servidores proxy de servicio para comunicarse con servicios WCF mediante otros enlaces, como NetTcpBinding y WSFederationHttpBinding. Muchos de estos enlaces requieren establecer propiedades de canal adicionales, como descriptores de seguridad. Para obtener ejemplos que ilustran el uso de otros enlaces, vea la sección Ejemplos de servicios web de Windows, en particular los ejemplos de capa de canal TCP, ejemplos de capas de canal HTTP y subsecciones ejemplos de capas de canal de seguridad .