Kontrakty routingu
Kontrakty routingu definiują wzorce komunikatów, które usługa routingu może przetwarzać. Każdy kontrakt jest bez typów i umożliwia usłudze odbieranie komunikatu bez znajomości schematu lub akcji komunikatu. Dzięki temu usługa routingu może ogólnie kierować komunikaty bez dodatkowej konfiguracji dla specyficznych dla trasowanych komunikatów bazowych.
Kontrakty routingu
Ponieważ usługa routingu akceptuje ogólny obiekt komunikatów WCF, najważniejszą kwestią podczas wybierania kontraktu jest kształt kanału, który będzie używany podczas komunikacji z klientami i usługami. Podczas przetwarzania komunikatów usługa routingu używa symetrycznych pomp komunikatów, więc ogólnie kształt kontraktu przychodzącego musi być zgodny z kształtem kontraktu wychodzącego. Istnieją jednak przypadki, w których dyspozytor modelu usługi może modyfikować kształty, takie jak gdy dyspozytor konwertuje kanał dwukierunkowy na kanał żądania-odpowiedź, lub usuwa obsługę sesji z kanału, gdy nie jest wymagany i nie jest używany (tj. gdy sessionMode.Allowed, konwertowanie IInputSessionChannel na IInputSessionChannel).
Aby obsługiwać te pompy komunikatów, usługa routingu udostępnia kontrakty w System.ServiceModel.Routing przestrzeni nazw, która musi być używana podczas definiowania punktów końcowych usługi używanych przez usługę routingu. Kontrakty te są bez typów, co umożliwia otrzymanie dowolnego typu komunikatu lub akcji i umożliwia usłudze Routing Service obsługę komunikatów bez znajomości określonego schematu komunikatów. Aby uzyskać więcej informacji na temat kontraktów używanych przez usługę routingu, zobacz Routing Contracts (Kontrakty routingu).
Kontrakty udostępniane przez usługę routingu znajdują się w System.ServiceModel.Routing przestrzeni nazw i są opisane w poniższej tabeli.
Kontrakt | Kształt | Kształt kanału |
---|---|---|
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 |