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 :

Communication entre 2 programmes


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Par défaut Communication entre 2 programmes
    Bonjour à tous,

    J'ai déjà vu pas mal de sujet concernant ceci mais sans réellement trouver mon bonheur donc je vais exposer mon problème :

    Je développe actuellement un site web (en ASP) utilisant une BDD PostgreSQL.
    Dans le but de réduire les accès à la base de données je souhaiterais en fait faire un programme (en C#) qui s'occupe de la section session utilisateurs, de manière à tout avoir dans la RAM sans avoir le moindre accès disque.

    Le problème n'est pas de faire ce programme ni comment l'optimiser mais plutôt comment faire pour communiquer avec lui à partir de ma page ASP d'une manière relativement similaire à la communication entre un programme et une BDD.

    En gros ce que je souhaiterais c'est d'avoir ce programme tournant en continu et recevant des instructions depuis un programme externe et renvoyant les informations nécessaires.

    J'ai d'abord pensé aux services (je connais pas trop) mais j'ai pas l'impression que d'un appel à l'autre, on garde ce qui a été fait dans les appels précédents.

    Voilà, j'espère avoir exposé clairement le problème et merci d'avance pour toutes vos réponses

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    "services" -> tu parles de services web ou service windows ?

    mais j'ai pas l'impression que d'un appel à l'autre, on garde ce qui a été fait dans les appels précédents.
    Qu'est ce que tu veut dire par appel : callback ?

    Un service web pourrait convenir. Sinon tu peut faire un service windows, ou une application console, le tout sera d'ouvrir un port TCP pour ecouter les message qui arrive dessus et ouvrir un autre port TCP pour envoyer les réponses. Et ainsi tu peut communiquer entres tes deux programmes via des ports TCP.
    En moins beau tu peut communiquer entre les deux programmes via des fichiers texte, chacun ecrivant à son tour dedans et lisant le contenu.

  3. #3
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Pas beau les fichiers textes avec 2 programmes qui y accedent en lecture et ecriture

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    ouais ouais je sais mais des fois si c'est juste pour dire "j'ai fini mon travail", on peut imaginer utiliser des fichiers textes, même pas forcement les remplier, juste les créer et détecter leurs présences. Enfin s'il veut réduire les accés disque il ne choisira pas cette solution .

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Par défaut
    Ce que j'entendais par "services" était bel et bien services web, désolé d'avoir oublié de préciser, les services windows m'étaient pas venu à l'idée sur le moment. Cependant je n'y connais rien en services donc je ne sais pas si l'un d'eux conviendrait.

    Pour ce que j'entends par appel, je vais détaillé un peu :

    Mon programme en C# (dont j'ai parlé dans le premier post) contient plusieurs fonctions :
    - Créer un objet SESSION (contenant un ID, un nom et un pass, entre autres)
    - Vérifier la correspondance entre les arguments et les objets SESSION déjà créés
    - Récupérer des informations diverses sur les objets SESSION existants
    - etc...

    A savoir que toutes ces fonctions renverraient un argument (booléen le plus souvent)

    Le principe est extrêmement similaire à une base de donnée, si ce n'est que toutes les informations sont stockées dans la mémoire vive de l'ordinateur et non pas sur le disque auquel accèderait une base de donnée.

    Donc ce que j'entend par appel, c'est ma page ASP qui appelle une de ces fonctions existants dans le programme C#, qui lui tourne en continu sur le serveur, alors que la page ASP ne s'exécute que le temps de générer la page.

    L'appel se déroulerait donc tout comme un appel de fonction au sein d'un même programme, sauf que là, l'appel se déroulerait dans un programme et la fonction s'exécuterait dans un autre.

    De ce que j'ai cru comprendre des services webs, si on appel une fonction d'un service web qui écrit des données dans la mémoire vive, ces données seront oubliées lors du prochain appel (mais je peut très bien me tromper). C'est à tout prix ce que je souhaite éviter.

    Pour ce qui est de la lecture / écriture dans un fichier, outre le fait que ce soit pas beau, ça requiert un accès disque et par conséquent ça reviendrait au même temps d'accès (et même probablement pire) qu'une base de donnée.

    Au final le service windows que tu suggère me semble le mieux (pour l'instant en tout cas) je vais essayer de me renseigner là-dessus voir ce qu'il y a moyen faire.

    Pour l'histoire de l'ouverture et écoute de port TCP, je suis une bille en réseau donc j'ai pas trop compris

    Merci en tout cas pour les réponses

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bha en fait, pour faire ce que tu veux faire, il faut soit pouvoir accéder aux méthodes de l'instance de l'objet créer par ton programme qui tourne sans s'arrêter. C'est ce que font, si je ne me trompe pas, les objets COM, et les services Web. En ce qui concerne la conservation des valeurs en mémoires pour les services web, j'en sais rien.

    Sinon il faut pouvoir communiquer avec un programme par différent moyen, que ce soit des fichiers, l'envois d'interuption système que le programme va intercepter (avec cela tu va t'amuser, surtout sous windows, je ne te conseille pas), ou la communication via des ports TCP. En gros t'ouvre des ports TCP sur ta machine local comme si tu comptais communiquer avec une autre machine, sauf que tu va communiquer avec un autre programme de la même machine. C'est pas très compliquer en c#, je viens de le faire mais il faut avoir quelque notion de base en réseau.

    Sur les ports TCP tu peut faire circuler des requettes HTTP par exemples, cela devrait t'interesser je pense . Pour trouver des exemples de cela, j'vais utiliser les mots clés HTTP et csharp sur google si je me souviens bien.

    Dans un de mes programmes je fait une requette HTTP et je récupère la réponse retourné, pour cela je me suis aidé de ce tutorial :
    http://pierrejallais.developpez.com/...RequestCSharp/

    J'espère que cela peut t'aider

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Alors pour répondre à ton problème, il y a deux voies...

    En réalité ces voies dépendent du framework sur lequel doivent tourner tes deux applis.
    si tu utilise dotnet 3.0 tu peux utiliser WCF (Windows Communication Fundation) et sinon .NET Remoting

    Le principe reste fondamentallement le meme, même si l'écriture WCF est plus sympa forcément.

    Dans tous les cas, le programme qui tourne en permanence visant à remplacer une base de données, doit être un service windows.
    Celui-ci EXPOSE un ou plusieurs webservices, sur le support de ton choix...
    En WCF, ou meme .NET Remoting d'ailleurs, le support n'a que peu d'importance, ca ne change pas grand chose au code.

    Parmis les supports tu as TCP, pour cela tu défini un hote et un port et c'est déjà pas mal (permet d'avoir le service sur une machine et l'asp sur une autre), sinon tu peux utiliser les namepipes (oblige à avoir le service et l'asp sur la meme machine)

    Dans ton ASP il te suffit de "CONSOMMER" le(s) webservice(s) exposé(s) par le service windows.

    Pour infos, le webservice consommé ne s'exécute pas dans le contexte de l'ASP mais dans le contexte du service windows.
    De plus avec .NET Remoting, il y a une notion appelée LifeTimeService indiquant la durée de vie du webservice, il suffit de définir celui-ci comme inexpirable et de définir l'interface exposée comme UNIQUE et instanciée une seule et unique fois coté service windows.
    Ainsi dans ce webservice il ne te reste plus qu'a stocker les données directement, et une autre page peut y accèder vu qu'ils accèdent TOUS à la meme instance de la classe qui implante le webservice.
    Le principe est sensiblement le meme avec WCF.

    Or si je ne m'abuse cela correspond EXACTEMENT à ton besoin.

    Si tu as besoin d'exemple de code, il y a deux très bons tutoriels sur ce site, un pour le .NET Remoting et l'autre pour l'introduction à WCF :
    - NET Remoting
    - WCF

    Pour les services windows tu as également cet article : http://selkis.developpez.com/tutorie...ervicewindows/
    et pour les webservice et SOAP tu peux toujours consulter : http://leduke.developpez.com/webservice/

    Bonne lecture et j'espère que ca répond à ta question.

  8. #8
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Par défaut
    J'ai pas encore parcouru dans le détail tous les liens que tu a posté mais ça répond exactement à ce que je cherche en effet. Il me reste plus qu'à le mettre en application

    Merci pour tout

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Pour les services windows tu as également cet article : http://selkis.developpez.com/tutorie...ervicewindows/
    Merci pour le liens, et dire que j'ai developpe un service en utilisant uniquement l'aide sur le site de microsoft, qui n'est pas toujours très clair.
    J'aurais du regarder s'il y avait un tutorial sur developpez.com.

    Une question qui n'a rien à voir, est ce que tu sais pourquoi l'option d'un service : "autoriser à interagir avec le bureau" ne marche pas tout le temps ?
    Ce que je veux dire, c'est que même cocher, sur certain poste le service en question ne tiendra pas compte de l'option (les clés dans la BDR ont la bonne valeur), sais tu pourquoi ?
    J'ai jamais rien trouvé la dessus.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    En quelques mots : Configuration et sécurité sur le poste client.

    En plus cela peut varier selon l'utilisateur qui est utilisé pour exécuter le service, Srvice Réseau, Système... Avec Service réseau par exemple, ya presque rien qui fonctionne donc ca c'est quasiment sure que ca marchera pas. (quasiment car parfois ca passe aussi)

    Après si les postes clients sont dans un domaine, il faut pas que regardr les règlages de sécurité et de fonctionnement au sein du domaine mais également locaux qui peuvent poser des problemes avec les paramètrages du domaine ce qui amene parfois à ce genre de résultat assez... déroutant.

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ok merci, j'en conclu que cette option n'est pas prioritaire et qu'une règle de sécurité peut annuler l'effet de l'option (ou interdir quelque chose qui empéchera la bonne application de l'option).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication entre deux programmes Java. http ? Rmi ? WS ? Autres ?
    Par tiboudchou dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 26/03/2009, 12h50
  2. communication entre deux programmes
    Par Invité dans le forum C
    Réponses: 19
    Dernier message: 12/10/2008, 12h07
  3. communication entre un programme et un service
    Par dvince38 dans le forum C++
    Réponses: 4
    Dernier message: 28/01/2008, 10h42
  4. Débutant, Communication entre deux programmes
    Par Madalen dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2007, 22h27
  5. Communication entre 2 programmes (débutant)
    Par mandaillou dans le forum C++
    Réponses: 43
    Dernier message: 12/12/2006, 21h54

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