Compartir a través de


Enrutar contratos

Los contratos de enrutamiento definen los patrones de mensaje que el servicio de enrutamiento puede procesar. Cada contrato no tiene tipo y permite que el servicio reciba un mensaje sin conocimiento del esquema o acción del mensaje. Esto permite que el servicio de enrutamiento redirija los mensajes de manera genérica sin configuración adicional para los detalles específicos de los mensajes subyacentes.

Enrutar contratos

Dado que el servicio de enrutamiento acepta un objeto Message WCF genérico, la consideración más importante al seleccionar un contrato es la forma del canal que se utilizará para comunicarse con los clientes y servicios. Al procesar mensajes, el servicio de enrutamiento usa bombas de mensajes simétricas, por lo que, por lo general, la forma del contrato entrante debe coincidir con la forma del contrato saliente. Sin embargo, hay casos en los que el distribuidor del modelo de servicio puede modificar las formas, como cuando el distribuidor convierte un canal dúplex en un canal de solicitud-respuesta, o quita la compatibilidad de sesión de un canal cuando no es necesario y no se usa (es decir, cuando SessionMode.Allowed, convierte un IInputSessionChannel en un IInputChannel).

Para admitir estos suministros de mensajes, el servicio de enrutamiento proporciona contratos en el espacio de nombres System.ServiceModel.Routing, que se deben usar al definir los puntos de conexión de servicio empleados por el servicio de enrutamiento. Estos contratos no tienen tipo, lo que permite la recepción de cualquier tipo de mensaje o acción, y permite que el servicio de enrutamiento controle los mensajes sin conocimiento del esquema de mensajes específico. Para obtener más información sobre los contratos usados por el servicio de enrutamiento, vea Contratos de enrutamiento.

Los contratos proporcionados por el servicio de enrutamiento se encuentran en el System.ServiceModel.Routing espacio de nombres y se describen en la tabla siguiente.

Contrato Forma Forma del canal
ISimplexDatagramRouter SessionMode = SessionMode.Allowed

AsyncPattern = true

IsOneWay = true
IInputChannel :> IOutputChannel
ISimplexSessionRouter SessionMode = SessionMode.Required

AsyncPattern = true

IsOneWay = true
IInputSessionChannel -> IOutputSessionChannel
IRequestReplyRouter SessionMode = SessionMode.Allowed

AsyncPattern = true
IReplyChannel :> IRequestChannel
IDuplexSessionRouter SessionMode=SessionMode.Required

CallbackContract=typeof(ISimplexSession)

AsyncPattern = true

IsOneWay = true

TransactionFlow(TransactionFlowOption.Allowed)
IDuplexSessionChannel -> IDuplexSessionChannel

Consulte también