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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    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 confirmé
    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
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    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 confirmé
    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
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    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.

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