Condividi tramite


Contratti di routing

I contratti di routing definiscono i modelli di messaggio che il servizio di routing può elaborare. Ogni contratto è senza tipi e consente al servizio di ricevere un messaggio senza conoscere lo schema o l'azione del messaggio. In questo modo il servizio di routing instrada i messaggi in modo generico senza una configurazione aggiuntiva per le specifiche dei messaggi sottostanti instradati.

Contratti di routing

Poiché il servizio di routing accetta un oggetto messaggio WCF generico, la considerazione più importante quando si seleziona un contratto è la forma del canale che verrà utilizzato durante la comunicazione con i client e i servizi. Durante l'elaborazione dei messaggi, il servizio di routing utilizza pompe di messaggio simmetriche, pertanto la forma del contratto in ingresso deve corrispondere alla forma del contratto in uscita. Tuttavia, esistono casi in cui il dispatcher del modello di servizio può modificare le forme, ad esempio quando il dispatcher converte un canale duplex in un canale request-reply o rimuove il supporto della sessione da un canale quando non è necessario e non viene usato ( ovvero quando SessionMode.Allowed, converte un IInputSessionChannel in un IInputChannel).

Per supportare questi gestori di messaggi, il servizio di routing fornisce contratti nello spazio dei nomiSystem.ServiceModel.Routing, che devono essere usati per definire gli endpoint di servizio utilizzati dal servizio di routing. Questi contratti sono senza un tipo specifico, il che consente la ricezione di qualsiasi tipo di messaggio o azione e permette al servizio di routing di elaborare i messaggi senza conoscere lo schema del messaggio specifico. Per altre informazioni sui contratti usati dal servizio di routing, vedere Contratti di routing.

I contratti forniti dal servizio di routing si trovano nello System.ServiceModel.Routing spazio dei nomi e sono descritti nella tabella seguente.

Contratto Forma Profilo del canale
ISimplexDatagramRouter ModalitàSessione = ModalitàSessione.Consentito

AsyncPattern = true

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

AsyncPattern = true

IsOneWay = true
IInputSessionChannel -> IOutputSessionChannel
IRequestReplyRouter ModalitàSessione = ModalitàSessione.Consentito

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

CallbackContract=typeof(ISimplexSession)

AsyncPattern = true

IsOneWay = true

FlussoTransazione(OpzioneFlussoTransazione.Consentito)
IDuplexSessionChannel -> IDuplexSessionChannel

Vedere anche