Frage

Um meinen WCF -Service zu starten, verwende ich Folgendes:

selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();

Irgendwann erzeugt dies eine Instanz von MyServiceClass. Wird es eine einzelne Instanz oder eine Instanz pro Anfrage erstellen?

War es hilfreich?

Lösung

Wenn Sie es auf eine einzelne Instanz beschränken möchten, können Sie Ihre Serviceklasse draußen instanziieren und die Instanz in den ServiceHost übergeben:

var myservice = new MyServiceClass();
selfHost = new ServiceHost(typeof(MyServiceClass), myservice); // forces singleton pattern
selfHost.Open();

Andere Tipps

Standardmäßig ist es eine Instanz pro Anfrage, aber Sie könnten dies ändern. Zum Beispiel könnten Sie Ihre eigenen schreiben IinstanceProvider und verwalten Sie das Leben der Serviceklasse selbst.

Alle diese Antworten sind korrekt, aber sie scheinen komplexer zu sein als das, was Sie fragen. Die Grundlagen, ob es eine Instanz pro Anruf, pro Sitzung oder Singleton schafft, werden von der kontrolliert InstanceContextMode Welches ist ein Attribut in Ihrer Serviceklasse. Beginnen Sie dort zu lesen.

Es wird eine Instanz pro Anfrage erstellen. Wenn Sie eine einzelne Instanz wünschen, können Sie eine statische Klasse verwenden. Die statische Klasse gibt es für die Lebensdauer der Anwendung. Sie werden nicht jedes Mal wieder eingesetzt, wenn ein Anruf vorhanden ist oder eine neue WCF -Verbindung hergestellt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top