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

Dotnet Discussion :

Dialogue service - IHM window


Sujet :

Dotnet

  1. #1
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 991
    Points
    991
    Par défaut Dialogue service - IHM window
    Bonjour à tous,

    J'avais quasiment fini mon programme, étant déjà passé du winform au wpf avec tout à refaire quand s'est posé de nouvelles questions que je n'avais pas anticipé (joie) étant donné que c'est un hobby j'ai du mal à me tenir informé, et sur internet on trouve de tout maintenant et pas mal de messages qui datent de +10 ans.

    Donc comme il est probable que je me lance dans une modification profonde de mon programme je demande des avis et indications vers quoi me tourner, car je n'ai pas envie de perdre un temps phénoménal pour arriver dans une impasse. Et je remercie d'avance ceux qui m'orienteront.

    En gros le projet:
    - Liste des fichiers, les dossiers de premier niveau dans des répertoires surveillés, et selon effectue des actions. C'est géré par une classe maison qui lis les infos au début, puis si nécessaire des fichiers sur partition NTFS (grace au lowindexid et highindexid), ça tourne bien, moins d'une s au début et 6/9ms à chaque boucle, ça se destine à de l'archivage et sur des fichiers de gros volume (type vidéo pro par ex). Le tout travaille avec différents modules en asynchrone.

    Etat Actuel
    Actuellement c'est une fenêtre qui est lancée, et je comptais fait une icone de notification dans le systray quand je vois d'un coup que... paf.. a pas sous wpf. J'ai vu qu'il y a des ruses pour le faire, mais ça m'a amené à pas mal réfléchir. Si j'ai envie de passer par un systray c'est pour prévenir une fermeture accidentelle de l'application, en prime je n'aime pas le principe de voir une application qui tourne en fond h24 dans la barre. Mais avec w10 MS semble gérer différemment....

    Questions et plan
    Donc j'ai gamberger et je me suis dit (corrigez moi si je me plante).
    - Autant passer le gros du programme, ce qui tourne en fond, en tant que service.
    - Utiliser les "toasts" si j'ai bien compris et que c'est possible, pour générer des notifications à l'utilisateur, c'est plus classe que de surveiller la fenêtre, et puis en prime ça peut être pas mal pour signifier: effacement d'un fichier, modification, ajout etc.. bref dans les options je peux mettre ce que l'utilisateur veut comme notifications du coup (sans que ça perturbe le programme qui tourne en fond bien sur).
    - l'IHM / Window (en wpf.. voir en uwp*) ne se lance que pour modifier les options des bots (dans le service), ajouter des dossiers à surveillé, et gérer des macros forcées à part du service (mais qui reprend certaines classes)

    Données transmises
    - En gros l'avancement, temps réel s'il y a des calculs en cours (barre de progressions maison à updater), des champs textes/label à modifier. service => client
    - client => service, déclencher un signal (ou autre) qu'une mise à jour de la configuration vient de se faire. (la config est sauvée dans un fichier xml, je pourrais employer d'autres moyens pour le relire, mais je préfère envoyer directement, si possible les objets)


    *uwp: mais j'ai pas trop bien compris ce qu'était le second, je n'ai pas envie de vendre... au mieux proposer une donation via paypal si le projet attire, et pas envie de passer par le microsoft store etc.. ça sera en opensource).



    Et du coup je me dis que si je vais dans ce système avec deux à trois projets dissociés, il faut que j'utilise un dialogue entre tout ça.. .donc j'avais bossé sur une appli internet (en standby hélas) avec de l'écoute de port (socket donc) en asynchrone, mais à la base cette application n'a pas vraiment de raison d'utiliser le net... a part si je veux faire tourner le service sur un nas tournant sous windows, et gérer l'interface à distance... mais ça me parait pas pour le moment spécialement utile. Donc en fouinant j'ai peut être trouvé, si j'ai bien compris, qu'on pouvait le faire en WCF... Donc est ce que c'est bien utile de passer par ça pour un dialogue local entre un service et une fenêtre ? (ne pas développer un dinosaure pour faire le boulot d'une souris en fait). Et également j'ai trouvé sur un forum de dév anglais que WCF était mort... et enfin peut être existe t'il un truc plus récent ?

    Bref merci si vous avez eu le courage de lire jusqu'au bout, et doublement merci si vous pouvez m'aiguiller.

    Cordialement.

  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
    pour le systray il faut prendre celui de windows forms (ajouter la référence)

    pour les toasts de W10 uwp doit le gérer nativement, pour wpf il faudra surement trouver une dll à mettre en référence
    uwp ne permet de faire que des applis pour windows 10 (pas les autres versions), et il faut distribuer l'appli sur le store de MS (l'app peut etre gratuite)
    uwp ne permet d'installer un service windows, tu pourras surement faire des tâches de fond, mais je n'ai pas le détail du fonctionnement ...
    par contre accéder à tous le disque dur avec une app uwp je ne suis pas sûr que c'est faisable, uwp c'est cloisonné pour plus de sécurité

    pour communiquer entre un service windows et une app il y a plein de méthodes : tcp/ip, canaux nommés (namedpipe), wcf (qui peut utiliser tcp ou namedpipe ou autre) etc ...
    wcf n'est pas mort du tout, c'est même compatible avec pas mal de standards
    par contre si tu ne connais pas, tu iras surement plus vite à apprendre l'utilisation des canaux nommés
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 991
    Points
    991
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    pour le systray il faut prendre celui de windows forms (ajouter la référence)

    pour les toasts de W10 uwp doit le gérer nativement, pour wpf il faudra surement trouver une dll à mettre en référence
    uwp ne permet de faire que des applis pour windows 10 (pas les autres versions), et il faut distribuer l'appli sur le store de MS (l'app peut etre gratuite)
    uwp ne permet d'installer un service windows, tu pourras surement faire des tâches de fond, mais je n'ai pas le détail du fonctionnement ...
    par contre accéder à tous le disque dur avec une app uwp je ne suis pas sûr que c'est faisable, uwp c'est cloisonné pour plus de sécurité

    pour communiquer entre un service windows et une app il y a plein de méthodes : tcp/ip, canaux nommés (namedpipe), wcf (qui peut utiliser tcp ou namedpipe ou autre) etc ...
    wcf n'est pas mort du tout, c'est même compatible avec pas mal de standards
    par contre si tu ne connais pas, tu iras surement plus vite à apprendre l'utilisation des canaux nommés
    Merci pour toutes tes indications. Pour les toasts j'ai opté hier pour faire un truc maison, finalement c'est pas si compliqué que ça surtout en wpf avec un storyboard. Si j'ai bien compris dans tous les cas les services n'agissent pas sur le bureau, donc j'ai opté pour scinder le programme en 3. Un service qui fait le job, un notifier en wpf. Et une vraie interface si besoin.. encore que je peux fusionner avec le notifier, je ne sais pas encore.

    Par contre j'en bave avec le wfc, j'ai pas mal avancé, j'en suis au duplex en fait. Je voulais signaler aux clients quand certains évènements surviennent, plutôt que de faire une boucle qui demande des informations... (ici par exemple création d'un dossier ou fichier) . Mais, si j'utilise serviceHost en mode persession or PerCall, n'ayant pas d'instanciation de la classe, je ne vois pas du tout comment accéder à la fonction qui me permet cela. J'ai vu qu'en mode Single c'était possible, bon ici j e n'ai pas besoin d'avoir une garantie de transmission d'information ... mais par contre je n'ai pas envie d'avoir un truc figé donc j'ai vu qu'il était possible de mettre en multiple, ou rentrant. Mais multiple ne donnerait pas de garantie sur l'ordre de transmission si j'ai bien compris. Après s'il me renvoie pas "je vais bien" là ou il est censé exécuter une mise à jour du fichier configuration... à la limite ça me dérange pas.

    Je me dis qu'il doit bien y'avoir un moyen d'accéder manuellement à ces fonctions...

    A moins que l'idée soit de charger mon programme à partir du serveur wcf et d'accéder au contenu depuis celui ci mais ça me parait étrange comme principe si le protocole de communication n'est pas séparé du reste du code en fait. C'est peut être moi qui ait des mauvaises habitudes mais pour moi le serveur de communication je comptais le faire tourner à part du reste de mon programme et juste envoyer des signaux à celui ci qu'il aurait retransmis.

    Après peut être que le modèle single correspond + dans le cadre d'une application qui n'enverra jamais 50 résultats différents. Enfin je sais pas ça me perturbe. Pour le moment je vais rester en single, si tu as des idées je suis preneur... Je comprends même pas comment servicehost peut utiliser ma classe sans l'instancier en plus. Bon en tout cas déjà je suis soulagé après une journée intensive pour comprendre le fonctionnement, de savoir que le wcf n'est pas mort


    Edit: bon j'ai trouvé comment résoudre un de mes soucis... je pensais que client.open(); envoyait direct un message au serveur, sauf que non. Donc pas d'initialisation de l'autre coté, cqfd. Avec un banal hello(); automatiquement la classe est instanciée, du coup j'ai pu créer un abonnement à un élément extérieur, depuis le constructeur.
    . m'a rendu fou !

  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
    pas tout compris, mais déjà bravo pour avoir vu autant de choses sur wcf en si peu de temps
    (c'est énorme donc il doit t'en rester pas mal, mais déjà en local les problèmes de sécurité ne se posent généralement pas)

    le notifier et l'app ca doit se réunir dans une seule app je pense, ce n'est qu'une window qui peut afficher une autre window je pense ^^

    après sur wcf j'ai pas encore tenté le duplex donc je ne pourrais t'en dire plus
    et normalement tes méthodes côté serveur doivent appeler des méthodes du traitement, ce n'est censé être que des relais avec un minimum de code
    tu peux faire des fonctions qui retournent des infos (même des classes, même des choses abstraites) qui permettront au client appelant d'avoir un "résultat"

    concernant le single/percall/persession ca dépend surtout de ce que fait ta classe exposée, si elle n'est qu'un relais vers du thread safe single est parfait je pense
    c'est quand on a des contraintes de non thread safe que c'est bien de pouvoir séparer

    après dans la logique (quand on est pressé) du "faire que ca marche", avant de "faire que ca soit en plus bien codé", tu peux faire que le client demande au serveur toutes les demies secondes s'il y a quelque chose à notifier, ca restera invisible sur les performances, même avec 10 sessions windows
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. C++ Service Windows - IHM (windows XP)
    Par amigauss dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2013, 12h08
  2. c'est quoi les Services sous Windows?
    Par kammour dans le forum Windows
    Réponses: 3
    Dernier message: 15/03/2006, 21h31
  3. Problèmes avec les services NT/Windows 2000
    Par newfsch dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 02/03/2006, 16h49
  4. Plantage de service sous Windows 2003 server
    Par akasim73 dans le forum MFC
    Réponses: 2
    Dernier message: 10/11/2005, 15h49
  5. Déclaration d'un service sous windows
    Par Hakkou dans le forum Windows
    Réponses: 2
    Dernier message: 03/10/2004, 09h35

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