Silverlight 4, HttpPoolingDuplex et Timer

Signaler
Messages postés
23
Date d'inscription
jeudi 31 mars 2011
Statut
Membre
Dernière intervention
11 mai 2012
-
Bonjour,

Je me sert dans un projet d'un service WCF HttpPoolingDuplex pour gérer mes connexion active ainsi que la transmission des évènements d'un utilisateurs vers un autre (Exemple Chat mais il n'y a pas que ça).

Sur le principe, dans mon service, j'ai mes OperationContract qui traitent les évènement (Message envoyé, Consultation de profil, ...) Tout celà fonctionne bien .... enfin presque ....

Comme je veux limiter au max les ressources utilisées, chaque "client" envoi grâce à un Timer un flux de données servant de Heartbeat (Il informe toute les 3 secondes) qu'il est encore connecté. Le "Serveur va donc mettre à jour un DateTime pour chaque "client" référencé et retourne le nombre de connexions active pour information.

Côté serveur, dans mon constructeur du service j'ai aussi déclaré un Timer qui se lance toutes les 30 secondes pour parcourir les connexion référencées et, en fonction de l'ancienneté de son dernier envoi (Grâce au DateTime), je supprime sa connexion (déco sauvage non intercepté côté client).

Lors de mes tests, tout se passe bien jusqu'à ce que je teste une déconnexion sauvage (Il me semble que c'est la cause).

Mes question sont les suivantes :

- Le fait de mettre un Timer dans le constructeur du service est-elle la meilleure solution ?
- Le fait de mettre un Timer dans le constructeur (ça aurai dû être ma première question) permet-il de le garder actif "ad vitam eternam" ?
- je me pose aussi des question sur la portée des variables (toutes déclarées au niveau de la classe) au niveau de mon Timer (System.Windows.Threading.DispatcherTimer timer new System.Windows.Threading.DispatcherTimer();)> Les variables sont-elles utilisables dans la méthode ???
- Y a t-il une meilleure solution pour réaliser mon objectif ?

En résumé : J'ai besoin d'un service qui tourne tout le temps et dans les deux sens, avec des variables côtés "serveur" globales accessible à toutes les sollicitations (Opérations et Timer pour la purge).

Pour info, ma classe possède les attributs suivants :

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class ComplisDuplexService : IComplisDuplexService

J'espère avoir été clair et merci d'avance pour vos retours.
Un débutant