IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Services Windows : Singleton et event.


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Services Windows : Singleton et event.
    Bonjour à tous,

    J'ai beau cherché sur le net(surement mal du coup), mais je ne trouve pas mon bonheur.
    Donc je me dis que cela ne coûte rien de venir poser la question.

    J'ai un service windows, et plusieurs applications peuvent y accéder.
    j'aimerais que celui-ci n'ai qu'une instance. Est il possible de créer un service windows qui fonctionnerait en singleton? Si oui comment gérer les accès concurrents?
    Le but étant de faire en sorte que ce service prenne les demandes des utilisateurs une par une.

    Le deuxième point vient du fait que j'aimerais faire en sorte que le service envoie directement des informations aux applications?
    Est ce possible? L'utilisation de socket pourra correspondre?

    Voilà, je ne sais pas je bloque un peu. Je n'arrive pas à voir par quel bout le prendre.

    Merci d'avance à ceux qui me prendrons le temps de répondre.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un service est à exécution unique par définition
    après ce que tu y fais dedans peut être singletonné si nécessaire, mais tu ne nous as pas dit comment les applications dialoguent avec le service ni à quoi elles accèdent

    dans l'autre sens oui socket peut aller, ou wcf, ou plein d'autres choses ...
    que le client initie la connexion pour préciser sa présence, ou que le service envoie une trame de découverte des applications ...

    sinon c'est plus une question de thread safe que de singleton, que ca soit en socket de base ou en wcf chaque demande arrive sur un thread
    si le truc qui gère le traitement ne doit pas laisser 2 personnes passer en même temps il y a la commande lock qui permet de faire attendre les autres
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour la réponse.

    Pour le moment la communication se fait via adresse TCP.
    Et via la classe ChannelFactory.

    D'accord pour la communication : service -> applications.
    Je pense que se sont les services qui viendront signaler leurs présences. Puis lors de l'envoi du message venant du service, si celui-ci ne parvient à communiquer avec une des applis il l'enlève de sa liste de communication.
    Je voyais un truc comme ça. Je suis preneur si tu as une idée sur la façon la plus simple de procéder.

    Ok pour le lock. L'appel d'une instance lockée ne génère pas d'erreur, juste une attente?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    channelfactory à priori c'est wcf (exposition d'une interface commune aux 2 applis, le serveur connait la classe, l'appel côté client est exécuté sur le serveur)
    qui peut passer par du tcp/ip, mais ce n'est pas un socket simple qui permet juste d'envoyer des octets et on se débrouille à coder les messages

    si tu es bien sur wcf alors il te faut un contrat de callback, une interface commune là aussi, mais quand le client se connecte au serveur il spécifie son contrat de callback, le serveur peut alors appeler des méthodes qui seront exécutés sur le client (si tu gardes une référence vers le proxy de chaque client donc, et tu pourras faire un for each pour les avertir tous)

    lock fait juste attendre oui, quand un est entre les { et } du lock les autres font la queue, et chacun passe tout seul
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    OK merci pour toutes ces précisions.
    Lorsque j'aurai une solution qui marche (avec ces précisions ça devrait le faire), je reviendrais dire comment j'ai procédé.
    En attendant je laisse le thread, ouvert. (Au pire je le ferme vendredi)

    Merci en tout cas.

  6. #6
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Si tu es bien en WCF, tu as un attribut qui te permet de spécifier comment ton service doit agir : ServiceBehavior
    Regarde du coté des propriétés ConcurrencyMode et InstanceContextMode mais que ça ne t’empêche pas de regarder les autres propriétés.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

Discussions similaires

  1. les builds events pour un service windows
    Par giova_fr dans le forum C#
    Réponses: 2
    Dernier message: 12/02/2013, 18h20
  2. Planifier le démarrage d'un service Window
    Par tscoops dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/03/2005, 14h56
  3. [WD7.5] Service Windows
    Par cqfd dans le forum WinDev
    Réponses: 1
    Dernier message: 29/03/2005, 08h58
  4. [VB6]Arreter un service windows
    Par bouboussjunior dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2004, 17h03
  5. [C#] Icône, barre des tâches et Service Windows
    Par SErhio dans le forum Windows Forms
    Réponses: 17
    Dernier message: 03/09/2004, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo