2009-06-24 14 views
12

Ho una configurazione del contenitore di iniezione delle dipendenze nella mia applicazione e penso che comporre il contenitore ogni volta che arriva una richiesta di servizio WCF sarà inefficiente.Qual è il ciclo di vita di un servizio WCF ospitato da IIS (http)?

Qualcuno può spiegarmi, per un servizio WCF ospitato da http/IIS, qual è il ciclo di vita del servizio? Se riesco a capirlo, posso prendere una decisione istruita su dove memorizzare, istanziare, distruggere, ecc. Il contenitore.

risposta

23

Se il InstanceContextMode è PerCall, la classe di servizio verrà creato da zero per ogni richiesta in arrivo, e quindi smaltiti quando è fatto.

Se il InstanceContextMode è PerSession, la classe di servizio verrà creato e utilizzato per la manutenzione un determinato cliente per tutta la durata della sessione (o fino a quando si verifica un "InactivityTimeout", o si verifica un errore).

Se il InstanceContextMode è singolo (Singleton), verrà creata la classe di servizio quando la prima richiesta arriva e rimane in memoria fino a quando le richieste continuano ad arrivare in, fino a quando si verifica alcun errore e non InactivityTimeout è raggiunto.

Quindi, ce l'hai! Naturalmente, il modo di concorrenza (per PerSession e Single servizi) sarà anche entrare in gioco per rendere le cose solo un po 'più "interessante"

+0

Bello! Grazie, esattamente la risposta che volevo. –

+2

Per impostare questo si aggiunge un ServiceBehaviorAttribute alla classe di servizio. Questo è il mio che si combina bene con ninject: [ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall)] – Twisted

0

Dipende dal tuo servizio. Specificamente this e this.

1

Come si menziona che si stava tentando di integrare il servizio WCF di un'istanza con un contenitore di iniezione di dipendenza, Vorrei solo dire che ho avuto un'esperienza molto positiva usando lo Castle WCF Integration Facility per fare proprio questo.

È specifico per il contenitore di input delle dipendenze Castle Windsor ma con il fatto di essere open source è possibile cercare all'interno e comprendere alcune delle sfide e delle soluzioni fornite.

Problemi correlati