none
Communiquer avec un serveur WCF en python RRS feed

  • Question

  • Bonjour tout monde,

    Alors je suis stagiaire en développement et on m'a demandé d'établir une communication avec un serveur WCF existant avec le langage python. Malheureusement, je n'ai jamais vraiment étudié tout ce qui est connexion, serveur, protocole, HTML etc, et j'ai beaucoup de mal à comprendre ce qu'est basiquement un serveur wcf et comment on y accède.

    De ce que j'ai compris, une fois le serveur créé et la communication établie, on accède aux fonctionnalités du serveur grâce à une API toute simple, et cela se fait normalement en C++, mais je ne trouve pas cette API.

    Pouvez-vous m'éclairer?

    Merci beaucoup!

    lundi 25 août 2014 12:25

Réponses

  • Bonjour,

    Pour faire simple... très simple... extrêmement simple... et sans vous noyer dans les technologies, voyez WCF comme une des façons de faire communiquer 2 applications en .NET.

    Si nous choisissons généralement WCF par rapport aux autres technologies du framework .NET, c'est qu'elle est très modulaire, réglable et s'adapte à de nombreux cas de figures. Elle est pour ces raisons préconisée par Microsoft.

    La communication Microsoft .Net à  Microsoft.Net se passe donc sans encombre.

    C'est toutefois  une autre histoire lorsque l'on change de technologie (Java, PHP, Python, etc). En effet, les librairies, représentations mémoires, façon de compiler, etc, ne sont pas les mêmes.

    Le besoin de communication entre technologies existent depuis longtemps et il y a plein de façon de faire. Du plus bas niveaux (communication via socket, mémoire partagée, IPC, etc) à des niveaux plus abstraits (Corba, UNO ou COM dans une moindre mesure). Mais parmi toutes ces solutions, une a su se démarquer des autres : les webservices.

    De quoi s'agit-il ? Tout simplement de l'utilisation du web non plus pour  des humains mais pour  des programmes. En effet, que vous soyez sur PC, Mac, Linux, Unix... ou sur téléphone mobile Windows Phone, Android, iPhone... que vous utilisiez un navigateur Microsoft Internet Explorer, Chrome, Safari, Firefox, Opera... vous arrivez à afficher le contenu de pages web de serveurs... Donc à récupérer des données indépendamment de votre matériel/logiciel.

    De même, vous arrivez à remplir des formulaires (réserver des billets de train par exemple) donc vous réussissez à envoyez des données, indépendamment des technologies.

    Voilà exactement ce qu'apporte le web : envoie et récupération de données indépendamment de la technologie et de la localisation.

    Les webservices sont donc une utilisation particulière du web, non plus par des humains, mais par des programmes, pour s'échanger des données.

    Ceci dit, il a fallu normaliser la façon de communiquer, il y a donc  plusieurs façon de parler "webservices".

    Toutefois 2 protocoles ont pris le dessus sur d'autres, jugés désormais trop anciens (XML-RPC notamment).

    Il s'agit des webservices de type REST (très proche du web que pratique l'être humain), soit de type SOAP (bien plus avancé, parfois jugé trop complexe).

    Par ailleurs, qu'ils soient REST ou SOAP, on peut échanger le contenu des messages (du moins le payload pr SOAP car le reste est XML) en XML ou en JSON ; tous deux étant des formats textes incompatibles pour représenter des données.

    In fine, la communauté informatique s'est majoritairement orienté vers les couples REST/JSON et SOAP/XML. Il y a donc 2 façons classiques de faire des webservices.

    Dans votre cas de figure (et c'est cela qui vous intéresse), si votre serveur WCF expose des webservices alors la communication avec  Python est facilitée car WCF sait exposer des services que Python sait appeler  (il y a de multiples librairies pour ça https://wiki.python.org/moin/WebServices).

    Il vous faut donc tout d'abord vous renseigner sur le serveur WCF et savoir ce qu'il expose (demandez à votre maître de stage ou à l'équipe qui a codé le serveur WCF). Si c'est classique, c'est à dire webservices REST/JSON ou SOAP/XML, vous devrez simplement choisir la librairie adéquate côté Python et suivre les méthodologies d'appel (REST est très simple à mettre en oeuvre, mais demande des étapes de conversion dans le code. Alors que SOAP demande des étapes initiales plus longues mais s'avère plus simple dans le code).

    Si le serveur WCF n'utilise pas des webservices mais des formats binaires, du MSMQ, etc ... Demandez à l'équipe en charge du serveur WCF s'ils ne peuvent pas vous exposer des webservices (il s'agit souvent d'un simple réglage).

    Enfin, s'il n'y a absolument pas de webserices, alors vous êtes effectivement dans une situation où il faut oublier les webservices et passer par du C++ enrobé dans du Python mais ça serait bien dommage d'en arriver là...

    En espérant vous avoir éclairé,

    Bien cordialement,


    Fabrice JEAN-FRANCOIS, Novencia TS

    • Marqué comme réponse Eulala mercredi 27 août 2014 09:38
    lundi 25 août 2014 14:20

Toutes les réponses

  • Bonjour,

    Pour faire simple... très simple... extrêmement simple... et sans vous noyer dans les technologies, voyez WCF comme une des façons de faire communiquer 2 applications en .NET.

    Si nous choisissons généralement WCF par rapport aux autres technologies du framework .NET, c'est qu'elle est très modulaire, réglable et s'adapte à de nombreux cas de figures. Elle est pour ces raisons préconisée par Microsoft.

    La communication Microsoft .Net à  Microsoft.Net se passe donc sans encombre.

    C'est toutefois  une autre histoire lorsque l'on change de technologie (Java, PHP, Python, etc). En effet, les librairies, représentations mémoires, façon de compiler, etc, ne sont pas les mêmes.

    Le besoin de communication entre technologies existent depuis longtemps et il y a plein de façon de faire. Du plus bas niveaux (communication via socket, mémoire partagée, IPC, etc) à des niveaux plus abstraits (Corba, UNO ou COM dans une moindre mesure). Mais parmi toutes ces solutions, une a su se démarquer des autres : les webservices.

    De quoi s'agit-il ? Tout simplement de l'utilisation du web non plus pour  des humains mais pour  des programmes. En effet, que vous soyez sur PC, Mac, Linux, Unix... ou sur téléphone mobile Windows Phone, Android, iPhone... que vous utilisiez un navigateur Microsoft Internet Explorer, Chrome, Safari, Firefox, Opera... vous arrivez à afficher le contenu de pages web de serveurs... Donc à récupérer des données indépendamment de votre matériel/logiciel.

    De même, vous arrivez à remplir des formulaires (réserver des billets de train par exemple) donc vous réussissez à envoyez des données, indépendamment des technologies.

    Voilà exactement ce qu'apporte le web : envoie et récupération de données indépendamment de la technologie et de la localisation.

    Les webservices sont donc une utilisation particulière du web, non plus par des humains, mais par des programmes, pour s'échanger des données.

    Ceci dit, il a fallu normaliser la façon de communiquer, il y a donc  plusieurs façon de parler "webservices".

    Toutefois 2 protocoles ont pris le dessus sur d'autres, jugés désormais trop anciens (XML-RPC notamment).

    Il s'agit des webservices de type REST (très proche du web que pratique l'être humain), soit de type SOAP (bien plus avancé, parfois jugé trop complexe).

    Par ailleurs, qu'ils soient REST ou SOAP, on peut échanger le contenu des messages (du moins le payload pr SOAP car le reste est XML) en XML ou en JSON ; tous deux étant des formats textes incompatibles pour représenter des données.

    In fine, la communauté informatique s'est majoritairement orienté vers les couples REST/JSON et SOAP/XML. Il y a donc 2 façons classiques de faire des webservices.

    Dans votre cas de figure (et c'est cela qui vous intéresse), si votre serveur WCF expose des webservices alors la communication avec  Python est facilitée car WCF sait exposer des services que Python sait appeler  (il y a de multiples librairies pour ça https://wiki.python.org/moin/WebServices).

    Il vous faut donc tout d'abord vous renseigner sur le serveur WCF et savoir ce qu'il expose (demandez à votre maître de stage ou à l'équipe qui a codé le serveur WCF). Si c'est classique, c'est à dire webservices REST/JSON ou SOAP/XML, vous devrez simplement choisir la librairie adéquate côté Python et suivre les méthodologies d'appel (REST est très simple à mettre en oeuvre, mais demande des étapes de conversion dans le code. Alors que SOAP demande des étapes initiales plus longues mais s'avère plus simple dans le code).

    Si le serveur WCF n'utilise pas des webservices mais des formats binaires, du MSMQ, etc ... Demandez à l'équipe en charge du serveur WCF s'ils ne peuvent pas vous exposer des webservices (il s'agit souvent d'un simple réglage).

    Enfin, s'il n'y a absolument pas de webserices, alors vous êtes effectivement dans une situation où il faut oublier les webservices et passer par du C++ enrobé dans du Python mais ça serait bien dommage d'en arriver là...

    En espérant vous avoir éclairé,

    Bien cordialement,


    Fabrice JEAN-FRANCOIS, Novencia TS

    • Marqué comme réponse Eulala mercredi 27 août 2014 09:38
    lundi 25 août 2014 14:20
  • Bonjour,

    Merci beaucoup pour votre explication ! Ça m'éclaire vraiment sur toutes ces notions qui me semblaient inconnues, je vais creuser donc et voir comment est fait ce serveur, maintenant je sais quoi chercher.

    Merci encore!

    Bien cordialement.

    mercredi 27 août 2014 07:59