2014-07-14 5 views
1

Comment puis-je avoir des données partagées entre les instances d'un service WCF, lorsque j'utilise InstanceContextMode.PerCall, j'ai besoin d'une liste partagée que les instances vont écrire et lire?WCF InstanceContextMode.PerCall, données partagées entre les appels

EDIT

Utiliser idée @usr je créé une classe singleton qui a une file d'attente où le service WCF enregistrera ses messages, et dans la classe singleton j'ai un fil conducteur qui consommera des messages de la file d'attente , problème de producteur/consommateur.

Répondre

1

Conservez vos données partagées dans une classe différente de la classe de service et que votre classe de service soit sans état. Le service sans état peut obtenir l'instance singleton et l'utiliser.

Voici un croquis:

class MySingleton { 
//You can use any lazy initialization logic you like 
//I just used a static initializer as an example 
public static readonly MySingleton Instance = new ...(); 

//Move all static data into this class 
//Use it from anywhere you like 
} 

class MyWcfService { 
//This WCF service has no state 
//Any instancing mode will do 
public void SomeServiceMethod() { 
    MySingleton.Instance.DoSomething(); 
} 
} 

Cela n'a rien à voir avec la question: Stateful web-services et web-apps sont à éviter. Vous devez supposer que l'application est supprimée à tout moment (par exemple une panne de courant, un plantage, un bug, ...). En outre, vous avez besoin d'une solution à haute disponibilité qui consiste généralement à instancier plusieurs fois l'application.

+0

Encore une chose, je vais héberger mon service WCF dans un service Windows, peut-être est-ce une solution d'avoir ces données au niveau du service Windows et non au service WCF, si cela a du sens. – danrt

+0

Oui, cela a aussi du sens. Vous avez juste besoin de fournir à la classe de service une référence aux données partagées d'une manière ou d'une autre. Une variable statique est un moyen facile de le faire. – usr

+0

Oui cela pourrait résoudre mon problème, mais je ne pouvais pas trouver un moyen d'envoyer ces données à WCF. – danrt

Questions connexes