Enrutar contratos
Los contratos de enrutamiento definen los patrones de mensaje que puede procesar el servicio de enrutamiento. Todos los contratos son sin tipos y permiten al servicio recibir un mensaje sin conocimiento de la acción o del esquema del mensaje. Esto permite al servicio de enrutamiento enrutar mensajes genéricamente sin configuración adicional para las características de los mensajes subyacentes que se enrutan.
Enrutar contratos
Como el servicio de enrutamiento acepta un objeto de mensaje de WCF genérico, el aspecto más importante que se debe tener en cuenta al seleccionar un contrato es la forma del canal que se usará al comunicarse con los clientes y los servicios. Al procesar mensajes, el servicio de enrutamiento usa suministros de mensajes simétricos, así que, normalmente, la forma del contrato entrante debe coincidir con la forma del contrato saliente. Sin embargo, en algunos casos el distribuidor del modelo de servicio puede modificar las formas, por ejemplo, cuando se convierte un canal dúplex en un canal de solicitud-respuesta o bien cuando se quita el soporte de la sesión de un canal cuando no es necesario y no se usa (es decir, cuando SessionMode.Allowed, convierte IInputSessionChannel en 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 son sin tipo, lo que permite recibir cualquier acción o tipo de mensaje, y permite al servicio de enrutamiento administrar mensajes sin conocer el esquema del mensaje concreto. Para obtener más información sobre los contratos que usa el servicio de enrutamiento, consulte Contratos de enrutamiento.
Los contratos proporcionados por el servicio de enrutamiento se encuentran en el espacio de nombres System.ServiceModel.Routing y se describen en la siguiente tabla.
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 |