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

Développement Web avec .NET Discussion :

Controler une application sur le serveur


Sujet :

Développement Web avec .NET

  1. #1
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut Controler une application sur le serveur
    Bonjour,

    Mon premier problème réside dans sa formulation car je ne suis vraiment pas certain de tout comprendre...

    Je voudrais faire une application web pour contrôler un device sur le port USB de mon serveur (un Arduino). Pour ceci, j'ai pensé passer par des services REST. J'ai donc construis mon application web (ASP) pour appeler les différents services, ce qui fonctionne plutôt bien. Par exemple, l'appui sur un bouton appelle un service dont l'implémentation ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SerialPort mySerial = new SerialPort("/dev/ttyACM0",9600);
    mySerial.Open();
    mySerial.WriteLine("UP0");
    Le problème que j'ai, c'est qu'à chaque fois que je vais appuyer sur mon fameux bouton, je vais créer une nouvelle instance du port série (ce qui a d'ailleurs pour effet de le fermer lors du new pour une raison que j'ignore...) et non pas utiliser celui déjà existant. Avec une application windows, l'objet SerialPort serait typiquement une variable globale à laquelle j'accèderais quand j'en ai besoin. Au début, j'avais pensé faire de même en créant cet objet dans ma page ASPX, sauf qu'à chaque appui sur un bouton la page est évidemment rechargée et l'objet perdu.

    Je voulais donc essayer de comprendre comment je pourrais faire un truc du style, quand je me log sur ma page web, je lance une application sur le serveur que je pourrais contrôler depuis la page web. Les services REST ne sont pas du tout obligatoires, c'était plus pour moi un moyen d'en apprendre un peu plus sur eux. Plus précisémment : sur ma page se trouverait typiquement trois boutons, un pour ouvrir le port série, un autre pour le fermer, et enfin un pour envoyer des messages via le port série.

    En espérant le tout compréhensible, merci de votre aide !

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Pour éviter de te retrouver avec de multiples instances, tu dois pouvoir implémenter un Singleton.

    Ce design pattern assez simple à implémenter te permet de n'avoir qu'une seule et même instance d'un objet au travers de ton application.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Salut,

    Je ne suis pas certain de voir comment ceci pourrait fonctionner avec une appli web, je m'explique.

    Quand ma page est loadée, je peux lancer une application sur le serveur, pas de problème. Par contre, à chaque fois par exemple que j'appuie sur un bouton, la page n'est pas reloadée de sorte que je perdrais l'instance, singleton ou pas ?

    J'imagine aussi que l'utilisation de web service n'est pas utile dans le cas d'une appli ASP puisque celle-ci tourne côté serveur, alors que c'est une solution pour une appli Silverlight qui tourne côté client ?

    (Un peu d'indulgence, j'essaie de comprendre comment tout ça fonctionne )

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par androz Voir le message
    Quand ma page est loadée, je peux lancer une application sur le serveur, pas de problème. Par contre, à chaque fois par exemple que j'appuie sur un bouton, la page n'est pas reloadée de sorte que je perdrais l'instance, singleton ou pas ?
    Non, le but du Singleton est de n'utiliser qu'une seule et unique instance justement En gros imagine le scénario suivant :

    On a 2 utilisateurs, Jean et Thomas. On a créé un compteur à l'aide du pattern Singleton, afin de pouvoir afficher le nombre d'utilisateurs connectés sur le site à l'instant T.

    Jean étant le premier visiteur, lorsqu'il appelle le compteur, l'instance n'existe pas. On va donc en créer une et la lui renvoyer. Il verra donc que le compteur vaut 1.

    Maintenant Thomas arrive sur le site. Il va lui aussi appeler le compteur. L'instance existe déjà et vaut 1, on va donc tout simplement l'incrémenter de 1, puis retourner l'instance. Donc Thomas verra que le compteur vaut 2.

    Ensuite Thomas se déconnecte, on va donc décrémenter le compteur, toujours sur la même instance. Ainsi lorsque Jean chargera une nouvelle page, il verra la valeur 1.



    Citation Envoyé par androz Voir le message
    J'imagine aussi que l'utilisation de web service n'est pas utile dans le cas d'une appli ASP puisque celle-ci tourne côté serveur, alors que c'est une solution pour une appli Silverlight qui tourne côté client ?
    Non puisque le Singleton gardera l'instance en mémoire, tu utiliseras la même instance à chaque fois



    Citation Envoyé par androz Voir le message
    (Un peu d'indulgence, j'essaie de comprendre comment tout ça fonctionne )
    Pas de soucis on est tous passés par là, et c'est à ça que sert le forum
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Merci pour ta réponse ! Je commence à y voir un peu plus clair.

    Juste à des fins de précisions, si je voulais plutôt utiliser un control Silverlight, le seul moyen que j'ai pour aller discuter avec le serveur c'est de passer par un service web (REST pour moi). Le comportement sera donc, à l'ouverture de la page mon appli ASP se lance (je ferai ici usage du pattern singleton), et les "commandes" sont envoyées par l'appli Silverlight via des services web. Là où j'ai encore un blocage conceptuel, c'est comment mon service va savoir sur quel instance de l'objet SerialPort travailler ? Mon blocage est que je vois un service web un peu comme une méthode static....

    Ce que je ne comprends pas : Ma page chargée va instancier un SerialPort, membre de mon appli ASP, le service web sera alors chargé de trouver cette instance mais comment/où ? Il faut que le service ait accès à l'appli ASP. Est-ce qu'une solution serait que mon interface (celle des services web) soit implémentée directement dans la classe de mon script ASP ?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par androz Voir le message
    Juste à des fins de précisions, si je voulais plutôt utiliser un control Silverlight, le seul moyen que j'ai pour aller discuter avec le serveur c'est de passer par un service web (REST pour moi). Le comportement sera donc, à l'ouverture de la page mon appli ASP se lance (je ferai ici usage du pattern singleton), et les "commandes" sont envoyées par l'appli Silverlight via des services web. Là où j'ai encore un blocage conceptuel, c'est comment mon service va savoir sur quel instance de l'objet SerialPort travailler ? Mon blocage est que je vois un service web un peu comme une méthode static....

    Ce que je ne comprends pas : Ma page chargée va instancier un SerialPort, membre de mon appli ASP, le service web sera alors chargé de trouver cette instance mais comment/où ? Il faut que le service ait accès à l'appli ASP. Est-ce qu'une solution serait que mon interface (celle des services web) soit implémentée directement dans la classe de mon script ASP ?
    C'est le WebService qui va consommer le Singleton. Je t'ai préparé ci-joint un petit projet de démo, voici comment il fonctionne :

    - ClassLibrary1 : une DLL contenant le Singleton
    - WebSite2 : le site Web qui héberge le WebService qui va gérer le Singleton
    - ConsoleApplication1 : une application console cliente qui va consommer le WebService
    - ConsoleApplication2 : une application console cliente qui va consommer le WebService

    Compile le tout avec Visual Studio. Assure-toi de bien compiler le WebSite2, et que le serveur de Visual Studio est correctement lancé (près de l'horloge).

    Ensuite va dans le dossier Bin\Debug de ConsoleApplication1. Lance la. Comme tu peux le voir, on affiche le PortName tel qu'il a été initialisé lors de la création de l'instance du Singleton. Laisse la ConsoleApplication1 ouverte, on va y revenir plus tard.

    Va dans le dossier Bin\Debug de ConsoleApplication2. Lance l'exécutable. Comme tu peux le voir, on récupère le PortName tel qu'il a été initialisé lors de la création de l'instance du Singleton, puis on met à jour le PortName avec une nouvelle valeur.

    Si tu reviens sur ConsoleApplication1, et que tu presses une touche du clavier, on va récupérer à nouveau la valeur du PortName au sein du Singleton, et comme tu peux le voir, on récupère bien la nouvelle valeur, qui a été mise à jour par la ConsoleApplication2.

    Ce n'est pas codé très proprement, mais l'idée est de te montrer qu'avec X clients (ConsoleApplication1 et 2), on peut utiliser le Singleton et partager des information entre ces deux clients.
    Fichiers attachés Fichiers attachés
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    T'es un chef, je regarde ça et je t'en donne des nouvelles !
    Merci beaucoup !!!

  8. #8
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Le projet WebSite2 n'existe pas mais est pourtant référencé dans la solution. Manquerait-il le folder contenant le code ?

    Pour la petite histoire, j'essaie aussi d'ajouter manuellement un webservice en référence de l'application console, mais aucun service n'est trouvé dans la solution ? De plus, où se trouve l'implémentation du service web ?

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ah oui... Ca doit être un problème au niveau des chemins sur le disque dur. Ouvre le fichier ConsoleApplication1.sln avec le bloc note, et vérifie que ça pointe bien vers le dossier où est le projet WebSite2.

    Ensuite en ce qui concerne le fait que les applications console ne trouvent pas le WebService, c'est parce que ton Visual Studio a du lui attribuer un port différent. Dans chacun des projets Console, ouvre le fichier app.config, et vérifie que l'URL contienne le bon port.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    A priori tout est ok pour le path et le port. Par contre là où je suis étonné, c'est que dans l'app.config des applications, l'URL pointe vers une page /WebSite2/WebService.asmx qui n'existe pas car le projet WebSite2 est vide (sauf une fois compilé où il contient la dll ClassLibrary1).
    Enfin, dans l'app.config de la dll, l'adresse est http://localhost:8731/Design_Time_Ad...ary1/Service1/ qui pointe vers ??

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok, au temps pour moi, j'avais tout simplement zappé de mettre le projet contenant le WebService dans la solution

    J'ai attaché à ce post la bonne version de la solution. Le mode d'emploi est le même que ce que j'ai expliqué plus haut Attention au numéro de port spécifié dans le app.config des 2 projets console, je ne sais pas si Visual Studio va utiliser les même chez toi.
    Fichiers attachés Fichiers attachés
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Je ne suis pas expert, mais il me semblait bien qu'il manquait qqch

  13. #13
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par androz Voir le message
    Je ne suis pas expert, mais il me semblait bien qu'il manquait qqch
    Moi non plus, je suis juste émerite
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Intégration d'une application sur un serveur web
    Par fhmayn dans le forum Autres hébergeurs
    Réponses: 2
    Dernier message: 20/04/2009, 14h17
  2. Réponses: 0
    Dernier message: 01/04/2009, 19h29
  3. Déploiement d'une application sur un serveur
    Par kfmystik dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/10/2008, 15h54
  4. [Système] Exécuter une application sur le serveur
    Par misteralex64 dans le forum Langage
    Réponses: 7
    Dernier message: 06/07/2007, 15h20
  5. Deploiment d'une application sur un serveur linux
    Par stomerfull dans le forum Administration système
    Réponses: 1
    Dernier message: 17/01/2006, 14h47

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