Contratti di routing
I contratti routing definiscono i modelli di messaggio che possono essere elaborati dal servizio di routing. Ogni contratto è sprovvisto di tipi e consente la ricezione di un messaggio da parte del servizio senza conoscere l'azione o lo schema del messaggio. In questo modo il servizio di routing può indirizzare in modo generico i messaggi senza ulteriore configurazione per le specifiche dei messaggi sottostanti indirizzati.
Contratti di routing
Poiché il servizio di routing accetta un oggetto WCF Message generico, la considerazione più importante in fase di scelta di un contratto ricade sulla forma del canale che verrà utilizzato per le comunicazioni con i client e i servizi. In caso di elaborazione di messaggi, il servizio di routing utilizza message pump simmetrici, quindi la forma del contratto in ingresso deve in genere corrispondere alla forma del contratto in uscita. Esistono tuttavia alcuni casi in cui il dispatcher del modello di servizi può modificare le forme, ad esempio nel caso in cui il dispatcher converte un canale duplex in un canale request/reply oppure rimuove il supporto della sessione da un canale quando non è richiesto e non viene utilizzato (ovvero, quando SessionMode.Allowed converte IInputSessionChannel in IInputChannel).
Per supportare questi message pump, il servizio di routing fornisce contratti nello spazio dei nomi System.ServiceModel.Routing, che deve essere utilizzato in caso di definizione degli endpoint servizio utilizzati dal servizio di routing. Questi contratti sono sprovvisti di tipi. In questo modo è possibile ricevere qualsiasi azione o tipo di messaggio e il servizio di routing può gestire i messaggi senza conoscere lo schema del messaggio specifico. Per ulteriori informazioni sui contratti utilizzati dal servizio di routing, vedere Contratti di routing.
I contratti forniti dal servizio di routing si trovano nello spazio dei nomi System.ServiceModel.Routing e vengono descritti nella tabella seguente.
Contratto | Forma | Forma del canale |
---|---|---|
SessionMode = SessionMode.Allowed AsyncPattern = true IsOneWay = true |
IInputChannel -> IOutputChannel |
|
SessionMode = SessionMode.Required AsyncPattern = true IsOneWay = true |
IInputSessionChannel -> IOutputSessionChannel |
|
SessionMode = SessionMode.Allowed AsyncPattern = true |
IReplyChannel -> IRequestChannel |
|
SessionMode=SessionMode.Required CallbackContract=typeof(ISimplexSession) AsyncPattern = true IsOneWay = true TransactionFlow(TransactionFlowOption.Allowed) |
IDuplexSessionChannel -> IDuplexSessionChannel |