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.

Contract Forma Forma del canale
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

Vedi anche