Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
cours:service_oriented_computing_and_web_services:2017-2018:gsoap [2018/04/12 07:08] tigli [gSOAP Toolkit Installation] |
cours:service_oriented_computing_and_web_services:2017-2018:gsoap [2018/04/12 15:35] (Version actuelle) tigli [How to publish a WSDL of a web service using gSOAP] |
||
---|---|---|---|
Ligne 15: | Ligne 15: | ||
==== A Quick How-To ==== | ==== A Quick How-To ==== | ||
+ | ([[http://www.cs.fsu.edu/~engelen/soap.html|Original Reference]]) | ||
== wsdl2h == | == wsdl2h == | ||
Ligne 34: | Ligne 35: | ||
== soapcpp2 : gSOAP Compiler == | == soapcpp2 : gSOAP Compiler == | ||
- | Now, we run the gSOAP compiler 'soapcpp2' on the gSOAP header file to produce the source code to implement the client application. The 'soapcpp2' stub and skeleton compiler generates proxies (and RPC stubs) for your client application. | + | Now, we run the gSOAP compiler 'soapcpp2' on the gSOAP header file to produce the source code to implement the client application. The 'soapcpp2' stub and skeleton compiler generates proxies (and RPC stubs) for your client application as follow : |
- | {{ :cours:service_oriented_computing_and_web_services:2017-2018:client.gif?200 |}} | + | {{ :cours:service_oriented_computing_and_web_services:2017-2018:client.gif?700 |}} |
The gSOAP runtime library provides a transport layer with an HTTP stack on top of TCP/IP as well as secure SSL and DIME/MIME attachment support. | The gSOAP runtime library provides a transport layer with an HTTP stack on top of TCP/IP as well as secure SSL and DIME/MIME attachment support. | ||
- | To develop a service application, run the gSOAP 'wsdl2h' parser on a WSDL to create a gSOAP header file. The header file is compiled with the 'soapcpp2' compiler: | + | To develop a service application, run the gSOAP 'wsdl2h' parser on a WSDL to create a gSOAP header file. The header file is compiled with the 'soapcpp2' compiler as follow: |
- | {{ :cours:service_oriented_computing_and_web_services:2017-2018:server.gif?200 |}} | + | {{ :cours:service_oriented_computing_and_web_services:2017-2018:server.gif?700 |}} |
+ | |||
+ | The 'soapcpp2' compiler generates the C/C++ Web service skeletons. You can also take a legacy C/C++ application and develop a service simply by entering the C/C++ Web service method operations and data types into a header file. The 'soapcpp2' compiler generates the source code for your project and produces a WSDL to advertize your Web service . | ||
- | The 'soapcpp2' compiler generates the C/C++ Web service skeletons. You can also take a legacy C/C++ application and develop a service simply by entering the C/C++ Web service method operations and data types into a header file. The 'soapcpp2' compiler generates the source code for your project and produces a WSDL to advertize your Web service. | ||
==== Tutorial : Getting Start with gSOAP ==== | ==== Tutorial : Getting Start with gSOAP ==== | ||
- | Write your first SOAP and REST Web Services following these instructions : | + | Here you can find a complete step by step tutorial to write yuor first SOAP and REST Web Services, from Hello World to the classical Calc : |
[[https://www.genivia.com/dev.html|Getting Start with gSOAP]] | [[https://www.genivia.com/dev.html|Getting Start with gSOAP]] | ||
Ligne 54: | Ligne 57: | ||
- | ==== Raspbian ==== | + | ==== Publish the WSDL of your web service using gSOAP ==== |
+ | || | ||
+ | [[https://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19.10| In HTTP GET Support ...]] find an example that produces a WSDL file upon a HTTP GET with path ** ?wsdl ** | ||
+ | |||
+ | <code> | ||
+ | |||
+ | int http_get(struct soap *soap) | ||
+ | { | ||
+ | FILE *fd = NULL; | ||
+ | char *s = strchr(soap->path, '?'); | ||
+ | if (!s || strcmp(s, "?wsdl")) | ||
+ | return SOAP_GET_METHOD; | ||
+ | fd = fopen("myservice.wsdl", "rb"); // open WSDL file to copy | ||
+ | if (!fd) | ||
+ | return 404; // return HTTP not found error | ||
+ | soap->http_content = "text/xml"; // HTTP header with text/xml content | ||
+ | soap_response(soap, SOAP_FILE); | ||
+ | for (;;) | ||
+ | { | ||
+ | size_t r = fread(soap->tmpbuf, 1, sizeof(soap->tmpbuf), fd); | ||
+ | if (!r) | ||
+ | break; | ||
+ | if (soap_send_raw(soap, soap->tmpbuf, r)) | ||
+ | break; // can't send, but little we can do about that | ||
+ | } | ||
+ | fclose(fd); | ||
+ | soap_end_send(soap); | ||
+ | return SOAP_OK; | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Test the interoperability ==== | ||
+ | |||
+ | After deploying the calc WS-SOAP, test its interoperability with a typical WCF client. | ||
+ | |||
+ | ==== Use gSOAP for monitoring ==== | ||
+ | |||
+ | Of course, this low level programming approach is not very useful to write classical services without any system challenge. | ||
- | Raspbian is a free operating system based on Debian optimized for the Raspberry Pi hardware. An operating system is the set of basic programs and utilities that make your Raspberry Pi run. However, Raspbian provides more than a pure OS: it comes with over 35,000 packages, pre-compiled software bundled in a nice format for easy installation on your Raspberry Pi. | + | On the other hand, as soon as you want to access to specific Operating System and even kernel API, such an approach seems interesting. |
+ | To illustrate that choose your own prefered POSIX function and test it through a Web Service gSOAP. | ||
+ | If you don't have imagination try // getpid() //. | ||