4 Stimmen

Wie initialisiere ich ein Serviceobjekt beim Self-Hosting in WCF?

Ich hoste einen Dienst innerhalb eines Windows-Dienstes.

Der folgende Ausschnitt instanziiert das ServiceHost-Objekt:

Host = new ServiceHost(typeof(Services.DocumentInfoService));

Die Klasse DocumentInfoService implementiert eine Vertragsschnittstelle mit Methoden, die Geschäftsobjekte aufrufen, die eine Initialisierung erfordern (eigentlich eine Verbindungszeichenfolge). Im Idealfall möchte ich, dass der Hosting-Prozess die Verbindungszeichenfolge aus der Konfigurationsdatei abruft und sie an einen Konstruktor für mein Dienstobjekt DocumentInfoService weitergibt, der sie behält und sie bei Bedarf an Geschäftsobjekte weitergibt.

Der ServiceHost-Konstruktor nimmt jedoch ein System.Type-Objekt an, sodass Instanzen von DocumentInfoService über den Standardkonstruktor erstellt werden. Ich habe festgestellt, dass es eine andere Konstruktor-Methode für ServiceHost, die eine Objektinstanz nimmt -- aber die Docs zeigen, dass für die Verwendung mit Singletons ist.

Gibt es eine Möglichkeit für mich, mein Objekt zu erhalten, nachdem es konstruiert ist, so dass ich es einige Initialisierungsdaten übergeben kann?

4voto

Franci Penov Punkte 73239

Der ServiceHost erstellt die Dienstinstanzen auf der Grundlage der für den Endpunkt konfigurierten Bindung und Verhaltensweisen. Es gibt keinen bestimmten Zeitpunkt, an dem Sie sich darauf verlassen können, dass es eine Service-Instanz gibt. Daher legt ServiceHost die Dienstinstanzen nicht offen.

Was Sie tun können, ist, Code in den Konstruktor Ihres Dienstobjekts einzufügen, um die relevanten Konfigurationswerte selbst über die ConfigurationManager Klasse.

Wenn Sie Ihre Konfiguration nicht in der app.config aufbewahren, wird das natürlich nicht funktionieren. Ein alternativer Ansatz wäre ein bekanntes Singleton-Objekt, auf das die Dienstinstanzen bei der Erstellung zugreifen, um die erforderliche Konfiguration zu erhalten.

Und es gibt auch die Möglichkeit, einen eigenen ServiceHost oder eine eigene ServiceHostFactory zu erstellen, um die Instanziierung des Dienstes explizit zu steuern. Dies würde Ihnen den Zugriff auf die neuen Service-Instanzen im Moment der Erstellung ermöglichen. Von dieser Option würde ich jedoch Abstand nehmen. Sie ist den Aufwand für Ihr Szenario nicht wert.

3voto

Mark Cidade Punkte 95914

Implementieren Sie Ihr eigenes ServiceHost . Siehe auch http://hyperthink.net/blog/servicehostfactory-vs-servicehostfactorybase/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X