Distribuidor de canal personalizado

Este ejemplo muestra cómo crear la pila del canal de manera personalizada implementando ServiceHostBase directamente y cómo crear un distribuidor de canal personalizado en un entorno de host web. El distribuidor del canal interactúa con IChannelListener para aceptar los canales y recupera los mensajes de la pila del canal. Este ejemplo también proporciona un ejemplo básico para mostrar cómo integrar una pila del canal en un entorno de host web con VirtualPathExtension.

ServiceHostBase personalizado

En este ejemplo se implementa el tipo base ServiceHostBase en lugar de ServiceHost para mostrar cómo reemplazar la implementación de la pila de Windows Communication Foundation (WCF) con un nivel de control de mensajes personalizado encima de la pila del canal. Se invalida el método virtual InitializeRuntime para compilar los agentes de escucha del canal y el distribuidor de canal.

Para implementar un servicio hospedado en web, obtenga la extensión de servicio VirtualPathExtension de la colección de la propiedad Extensions y agréguela al objeto BindingParameterCollection para que el nivel de transporte sepa cómo configurar el agente de escucha del canal según los valores de entorno de hospedaje, es decir, la configuración de Internet Information Services (IIS)/Servicio de activación de procesos de Windows (WAS).

Distribuidor de canal personalizado

El distribuidor de canal personalizado extiende el tipo ChannelDispatcherBase. Este tipo implementa la lógica de programación del nivel del canal. En este ejemplo, solo se admite IReplyChannel para el modelo de intercambio de mensajes de solicitud-respuesta, pero el distribuidor del canal personalizado se puede extender con facilidad a otros tipos de canal.

El distribuidor abre el agente de escucha del canal primero y, a continuación, acepta el canal de respuesta singleton. Con el canal, empieza a enviar los mensajes (solicitudes) en un bucle infinito. Para cada solicitud, crea un mensaje de respuesta y lo envía de nuevo al cliente.

Crear un mensaje de respuesta

El procesamiento de mensajes se implementa en el tipo MyServiceManager. En el método HandleRequest, el encabezado de mensaje Action se comprueba primero para ver si se admite la solicitud. Se define una acción "http://tempuri.org/HelloWorld/Hello" de SOAP predefinida para permitir el filtrado de mensajes. Esto es similar al concepto de contrato de servicios en la implementación de WCF de ServiceHost.

En el caso de la acción SOAP correcta, el ejemplo recupera los datos de mensaje solicitados y genera una respuesta correspondiente a la solicitud similar a lo que se ve en el caso de ServiceHost.

Para administrar el verbo HTTP-GET en especial, devuelve un mensaje HTML personalizado, en este caso, para que pueda examinar el servicio desde un explorador para ver que está compilado correctamente. Si la acción SOAP no coincide, envíe a un mensaje de error para indicar que no se admite la solicitud.

El cliente de este ejemplo es un cliente de WCF normal que no supone nada del servicio. De este modo, el servicio está diseñado especialmente para coincidir con lo que se obtiene de una implementación de WCFServiceHost normal. Como resultado, solo se requiere un contrato de servicio en el cliente.

Utilizar el ejemplo

Al ejecutar la aplicación cliente directamente, se genera el siguiente resultado.

El cliente está hablando con un servicio WCF de solicitud/respuesta. 
Escriba lo que desea decir al servidor:Howdy
El servidor respondió: Usted dijo: Howdy. Identificador de mensaje: 1
El servidor respondió: Usted dijo: Howdy. Identificador de mensaje: 2
El servidor respondió: Usted dijo: Howdy. Identificador de mensaje: 3
El servidor respondió: Usted dijo: Howdy. Identificador de mensaje: 4
El servidor respondió: Usted dijo: Howdy. Identificador de mensaje: 5

También puede examinar el servicio desde un explorador para que se procese un mensaje HTTP-GET en el servidor. De esta forma obtiene de vuelta texto HTLM con formato correcto.

Ee943696.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<InstallDrive>:\WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.

<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Channels\CustomChannelDispatcher