Domanda

Per dare il via il mio servizio WCF, io uso il seguente:

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

A un certo punto questo creerà un'istanza di MyServiceClass. Sarà creare una singola istanza o un'istanza per richiesta?

È stato utile?

Soluzione

Se si vuole limitare ad una singola istanza è possibile creare un'istanza vostro fuori classe di servizio e passare l'istanza nella ServiceHost:

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

Altri suggerimenti

Per impostazione predefinita è un'istanza per ogni richiesta, ma si potrebbe cambiare questo. Per esempio si potrebbe scrivere il proprio IInstanceProvider gestire la vita della classe di servizio da soli.

Tutte queste risposte sono corrette, ma sembrano più complesso di quello che stai chiedendo. Le basi di se si crea un'istanza per ogni chiamata, per sessione, o Singleton sono controllati dal rel InstanceContextMode che è un attributo sulla classe di servizio. Potrai iniziare a leggere lì.

Si creerà esempio per richiesta. Se si desidera una singola istanza si potrebbe utilizzare una classe statica. Esiste classe statica per la durata dell'applicazione. Essi non vengono reinstantiated ogni volta che c'è una chiamata o nuova connessione WCF è fatto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top