Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los enlaces y elementos de enlace (objetos que extienden a las clases System.ServiceModel.Channels.Binding y System.ServiceModel.Channels.BindingElement, respectivamente) se usan para asociar el modelo de aplicación del motor Windows Communication Foundation (WCF) con los generadores de canales y las escuchas de canales. Sin enlaces, el uso de canales personalizados requiere programación en el nivel de canal, tal y como se describe en Programación de Channel-Level de servicio y programación de cliente Channel-Level. En este tema se describe el requisito mínimo para habilitar el uso del canal en WCF, el desarrollo de un BindingElement para el canal y habilitar el uso desde la aplicación, tal como se describe en el paso 4 de Desarrollo de canales.
Información general
La creación de un BindingElement elemento para el canal permite a los desarrolladores usarlos en una aplicación WCF. BindingElement Los objetos se pueden usar desde la System.ServiceModel.ServiceHost clase para conectar una aplicación WCF al canal sin tener que tener que tener la información de tipo precisa del canal.
Una vez creado un BindingElement , puede habilitar más funcionalidad en función de sus requisitos siguiendo los pasos de desarrollo del canal restantes descritos en Desarrollo de canales.
Agregar un elemento de vinculación
Para implementar un personalizado BindingElement, escriba una clase que herede de BindingElement. Por ejemplo, si ha desarrollado un ChunkingChannel
que puede dividir mensajes grandes en fragmentos y volver a ensamblarlos en el otro extremo, puede usar este canal en cualquier enlace implementando BindingElement y configurando el enlace para usarlo. El resto de este tema usa ChunkingChannel
como ejemplo para mostrar los requisitos de implementación de un elemento de enlace.
El ChunkingBindingElement
es responsable de crear el/la ChunkingChannelFactory
y el/la ChunkingChannelListener
. Sobrescribe las implementaciones de CanBuildChannelFactory y CanBuildChannelListener y comprueba que el parámetro de tipo es IDuplexSessionChannel (en nuestro ejemplo, esta es la única forma de canal compatible con ChunkingChannel
) y que los demás elementos de enlace admiten esta forma de canal.
BuildChannelFactory comprueba primero que la forma de canal solicitada pueda crearse y después obtiene una lista de acciones de mensaje que puedan fragmentarse. Después crea un nuevo ChunkingChannelFactory
al que se le pasa el generador de canales interno. (Si está creando un elemento de enlace de transporte, ese elemento será el último en la pila obligatoria y, por consiguiente, deberá crear un agente de escucha de canal o generador de canales.)
BuildChannelListener tiene una implementación similar para crear ChunkingChannelListener
y pasarla al agente de escucha del canal interno.
En otro ejemplo de uso de un canal de transporte, la muestra Transporte: UDP, se proporciona la invalidación que se muestra a continuación.
En el ejemplo, el elemento de enlace es UdpTransportBindingElement
, que deriva de TransportBindingElement. Invalida los siguientes métodos para construir las fábricas asociadas al canal.
public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);
}
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);
}
También contiene los miembros para clonar BindingElement
y devolver nuestro esquema (soap.udp).
Elementos de enlace de protocolo
Los nuevos elementos de enlace pueden reemplazar o aumentar cualquiera de los elementos de enlace incluidos, agregando nuevos transportes, codificaciones o protocolos de nivel superior. Para crear un nuevo elemento de enlace de protocolo, empiece por extender la BindingElement clase . Como mínimo, debe implementar BindingElement.Clone e implementar ChannelProtectionRequirements
utilizando IChannel.GetProperty. Esto devuelve el ChannelProtectionRequirements para este elemento de enlace. Para obtener más información, consulte ChannelProtectionRequirements.
Clone debe devolver una copia nueva de este elemento de enlace. Como procedimiento recomendado, se recomienda que los autores de elementos de enlace implementen Clone mediante un constructor de copia que llame al constructor de copia base y, a continuación, clone los campos adicionales de esta clase.
Elementos de enlace de transporte
Para crear un nuevo elemento de enlace de transporte, extienda la TransportBindingElement interfaz . Como mínimo, debe implementar el Clone método y la TransportBindingElement.Scheme propiedad .
Clone: debería devolver una copia nueva de este elemento de enlace. Como procedimiento recomendado, se recomienda que los autores de elementos de enlace implementen Clone mediante un constructor de copia que llame al constructor de copia base y, a continuación, clone los campos adicionales de esta clase.
Scheme : la Scheme propiedad get devuelve el esquema URI del protocolo de transporte representado por el elemento de enlace. Por ejemplo, en las clases System.ServiceModel.Channels.HttpTransportBindingElement y System.ServiceModel.Channels.TcpTransportBindingElement, se devuelve "http" y "net.tcp" desde sus propiedades Scheme respectivas.
Elementos de enlace de codificación
Para crear nuevos elementos de enlace de codificación, empiece por extender la BindingElement clase e implementar la System.ServiceModel.Channels.MessageEncodingBindingElement clase . Como mínimo, debe implementar los Clonemétodos , MessageEncodingBindingElement.CreateMessageEncoderFactory y la MessageEncodingBindingElement.MessageVersion propiedad .
Clone. Devuelve una copia nueva de este elemento de enlace. Como procedimiento recomendado, se recomienda que los autores de elementos de enlace implementen Clone mediante un constructor de copia que llame al constructor de copia base y, a continuación, clone los campos adicionales de esta clase.
CreateMessageEncoderFactory. Devuelve MessageEncoderFactory, que proporciona un controlador a la clase real que implementa su nuevo codificador y cuál debería extender MessageEncoder. Para obtener más información, vea MessageEncoderFactory y MessageEncoder.
MessageVersion. Devuelve el MessageVersion utilizado en esta codificación, que representa las versiones de SOAP y WS-Addressing en uso.
Para obtener una lista completa de métodos y propiedades opcionales para elementos de enlace de codificación definidos por el usuario, vea MessageEncodingBindingElement.
Para obtener más información sobre cómo crear un nuevo elemento de enlace, vea Creación de enlaces User-Defined.
Una vez que haya creado un elemento de enlace para el canal, vuelva al tema Canales de desarrollo para ver si desea agregar compatibilidad con archivos de configuración al elemento de enlace, si y cómo agregar compatibilidad con la publicación de metadatos, y si y cómo construir un enlace definido por el usuario que usa el elemento de enlace.