2009-06-24 4 views
12

Ich habe eine Dependency-Injektion Container-Setup in meiner Anwendung und ich denke, dass das Komponieren des Containers jedes Mal, wenn eine WCF-Serviceanforderung kommt ineffizient sein wird.Welchen Lebenszyklus hat ein von IIS gehosteter (http) WCF-Dienst?

Kann mir jemand erklären, was der Lebenszyklus des Dienstes für einen von http/IIS gehosteten WCF-Dienst ist? Wenn ich das herausfinden kann, kann ich eine fundierte Entscheidung darüber treffen, wo der Container gelagert, instanziiert, zerstört usw. werden soll.

Antwort

23

Wenn Ihr InstanceContextModePerCall ist, wird die Serviceklasse bei jeder eingehenden Anfrage von Grund auf neu erstellt und anschließend verworfen.

Wenn Ihr InstanceContextModeist PerSession, wird die Serviceklasse erstellt und verwendet werden, um einen für die Dauer der Sitzung gegebenen Client Service (oder bis ein „InactivityTimeout“ angetroffen wird, oder ein Fehler auftritt).

Wenn Ihr InstanceContextModeEinzel (Singletons) ist, wird die Serviceklasse erstellt werden, wenn die erste Anforderung kommt und wird so lange in Erinnerung bleiben, wie Anfragen kommen immer in, solange kein Fehler auftritt und kein InactivityTimeout ist erreicht.

Also, da hast du es! Natürlich wird die Gleichzeitigkeit-Modus (für PerSession und Single Dienstleistungen) auch ins Spiel kommen, Dinge zu machen, nur ein bisschen mehr „interessant“

+0

Schön! Danke, genau die Antwort, die ich wollte. –

+2

Um dies festzulegen, fügen Sie Ihrer Serviceklasse ein ServiceBehaviorAttribute hinzu. Das ist meins, was gut zu ninject passt: [ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall)] – Twisted

0

Es hängt von Ihrem Servicebehavour ab. Speziell this und this.

1

Wie Sie erwähnen, dass Sie WCF-Dienst Instanziierung zu integrieren mit Dependency Injection Container versuchten, Ich möchte nur sagen, dass ich eine sehr positive Erfahrung mit dem Castle WCF Integration Facility gemacht habe, um genau das zu tun.

Es ist spezifisch für den Castle Windsor Dependency-Injektionscontainer, aber mit Open Source können Sie nach innen schauen und einige der Herausforderungen und Lösungen verstehen.

Verwandte Themen