Bonjour à tous,

Nous réalisons un projet pour notre école ou nous devons utiliser des méthodes d'un webservice WCF.

Ce webservice contient des listes d'objet en attribut. Lors de l'appel d'une méthode (du webservice) d'ajout, l'attribut liste du webservice reçoit un élément supplémentaire.

Nous avons utilisé ce système afin de ne pas utiliser une base de données trop gourmande en mémoire pour les données que l'on avait à gérer.

Cependant, sans comprendre pourquoi, nous nous sommes aperçu qu’au bout d'un certain laps de temps, le service semblait être détruit, détruisant ainsi la liste d'objet en mémoire. Pourtant le serveur IIS n'a pas bougé (pas de reboot, etc.).

Est-il possible d'allonger en quelque sorte la durée de vie de l'instance de ce service ? Si oui, est-il recommandé de faire ceci ?

Je joins un extrait du code de la classe du service en question pour mieux illustrer mon propos:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class ServiceSession
    {
 
        private SynchronizedCollection<Session> Sessions = new SynchronizedCollection<Session>();
 
        public ServiceSession()
        {
        }
 
        [OperationContract]
        public List<Session> GetListSessions()
        {
            List<Session> result = null;
            try
            {
                result = this.Sessions.ToList();
            }
            catch (Exception e)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error("Création d'une session de cours impossible", e);
                }
                result = null;
            }
            return result;
        }
 
        [OperationContract]
        public bool CreateCoursesSession(Teacher auteur, string name)
        {
            bool result = false;
            try
            {
                Session session = new Session(auteur, name);
                this.Sessions.Add(session);
                result = true;
            }
            catch (Exception e)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error("Création d'une session de cours impossible", e);
                }
                result = false;
            }
            return result;
        }

Merci par avance pour votre réponse.