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 :

Best practice winform et service


Sujet :

C#

  1. #1
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut Best practice winform et service
    Bonjour à tous,

    J'ai développé un service windows auquel on accède par remoting. J'expose donc une interface contenant mes méthodes.
    J'ai ensuite une couche graphique (GUI) en winform qui doit communiquer avec ce service.

    Pourriez-vous me dire quelle est la meilleure façon de faire pour utiliser ces méthodes. En effet, je souhaiterais faire une couche me permettant de travailler en asynchrone pour ne pas bloquer le thread GUI le temps de la requête qui peut parfois être longue.

    Il y a t'il quelque chose de spécifique à implémenter?

    Je pensais à une couche de type backgroundWorker qui enverrait une notification lorsque la tache serait terminée. Mais le problème est de bien implémenter cela. Si vous connaissez l'URL d'un bon tuto, je suis preneur. J'ai cherché mais encore rien trouvé

    D'avance merci du coup de main

  2. #2
    Invité
    Invité(e)
    Par défaut


    Si tu utilises WCF alors VS te permet de générer un proxy avec des méthodes asynchrones donc pas la peine de passer par un BackgroundWorker

  3. #3
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut
    Bonjour et merci pour ta réponse.

    Malheureusement elle ne m'aide pas beaucoup car je travaille en winform et non en WCF. Mais par contre l'idée du proxy me plait. J'aurais donc dans l'idée de partir sur une metchode qui instancie un thread pour se détacher de l'UI, un worker Thread. Apres je verrais bien un retour sur le thread UI en passant par un event Completed. Un peu comme le background worker.

    J'ai des idées, mais je sais pas comment les mettre en place et si elles sont pertinentes. J'ai le soucis de bien faire et c'est pourquoi je recherche le best practice.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu utilises quoi comme service ? ASMX ou autre ? dans tous les cas VS te permet d'ajouter une référence de service sur ton projet client donc il est toujours possible d'avoir un proxy généré avec des méthodes asynchrones. Dis-nous qu'est-ce qui te bloque sur ce point

    Sinon le fait d'utiliser un BackgroundWorker est aussi une bonne pratique.

  5. #5
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut
    Il s'agit ici d'un service windows tout à fait classique. ce service fournit des méthodes par remoting. Je peux utiliser une interface que le service mets à disposition au GUI.

    Le backgroundworker n'est pas une mauvaise chose en soit mais je le trouve lourd. en effet je vais devoir en instancier autant que j'ai de méthodes à appeler. L'objectif étant de passer par une librairie qui ferait cette gestion. La librairie ferait l'appel au service puis lorsqu'elle recevrait le résultat, elle lancerait une notification au GUI (sur le thread principal) avec en paramètre les données à récupérer. Bien sur cette couche devrait faire une conversion d'objet puisque lorsqu'on récupère des objets par remoting, il s'agit de référence.

    Ce qui me bloque ici:
    - La façon d'implémenter un système de backgroung working qui me permette de revenir sur le thread principal lorsque la tâche est terminée.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FraktaL Voir le message
    Ce qui me bloque ici:
    - La façon d'implémenter un système de backgroung working qui me permette de revenir sur le thread principal lorsque la tâche est terminée.
    C'est ce que fait la classe BackgroundWorker. Il suffit juste de t'abonner à l’évènement RunWorkerCompleted.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par FraktaL Voir le message
    Pourriez-vous me dire quelle est la meilleure façon de faire pour utiliser ces méthodes. En effet, je souhaiterais faire une couche me permettant de travailler en asynchrone pour ne pas bloquer le thread GUI le temps de la requête qui peut parfois être longue.
    Salut, je préferais faire les appels asynchrones et/ou lancer les threads sur serveur mais ne pas rentrer cette logique dans IHM sauf cas exceptionnel.
    Comment appeler des opérations de service WCF de façon asynchrone

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Si tu utilises WCF

    Il a dit qu'il avait utilisé le Remoting; pas la peine de lui répondre sur WCF.

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Bonjour

    Citation Envoyé par FraktaL Voir le message
    Malheureusement elle ne m'aide pas beaucoup car je travaille en winform et non en WCF.
    Il n'y aucune incompatibilité entre les deux (tu dois confondre avec WPF) !

    En revanche, il y en a une entre WCF et Remoting.

    Pourquoi avoir choisi Remoting qui est une techno dépassée depuis plus de 5 ans ?

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    Un petit tuto qui m'avait bien aidé http://glarde.developpez.com/dotnet/bgworker/cs/
    le backgroundworker faut pas en avoir peur il est super simple à utiliser (je me rappelle avoir utiliser des threads pensant que le backgroundworker n'était pas approprié alors que c'était le contraire).

  11. #11
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut
    Merci à tous,

    je vais me pencher sur la question du backgroundworker.
    Ce que je voulais éviter c'était de faire appel à un contrôle dans la couche asynchrone car j'avais vu une dll s'occupant d'envoyer les requêtes au service et renvoyant le résultat au GUI.

    Les remarques concernant le choix du remoting sont pertinentes. J'aurais pu utiliser l'IPC qui est plus souple ou pour être encore plus souple un service WCF.
    Mais le service WCF qui offre de nombreux avantages utilise IIS et je ne veux pas dépendre de IIS.

    Je souhaiterais une application composée d'un service et d'une interface qui interagit avec ce service.

    Si vous avez une idée ou quelque chose à me proposer qui apporte vraiment une plus value par rapport au remoting et qui n'utilise pas IIS je suis intéressé.

    Merci encore pour votre aide

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par FraktaL Voir le message
    Mais le service WCF qui offre de nombreux avantages utilise IIS et je ne veux pas dépendre de IIS.
    Faux !
    IIS permet effectivement d'héberger des services WCF mais n'importe quelle application peut également le faire.
    http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx

Discussions similaires

  1. [2012] Best Practices concernant un SID BI Self Service Virtualisé
    Par Study2007 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 04/03/2014, 12h25
  2. Best Practices sur Winform : demandes de précisions
    Par cobfly dans le forum Entity Framework
    Réponses: 1
    Dernier message: 12/03/2012, 17h01
  3. Best practice pour application Winform Entity Framework
    Par zesamoth dans le forum Entity Framework
    Réponses: 10
    Dernier message: 07/03/2012, 15h11

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