目录
1. 准备项目文件夹。
先创建一个文件夹保存我们这个项目的文件。
把 stdsoap2.cpp
文件从 gSoap 的文件夹里复制到当前文件夹,等一会编译项目的时候要用。其实可以用更优雅的方法,比如设置搜索路径等。本文中,我就粗暴处理了,直接复制过来,当然这样也无伤大雅,
2. 创建源代码
头文件 hello.h
:
int ns__hello(std::string name, std::string& greeting);
代码文件 hello.cpp
:
#include "soapH.h" // include the generated source code headers
#include "ns.nsmap" // include XML namespaces
int main()
{
return soap_serve(soap_new());
}
int ns__hello(struct soap *soap, std::string name, std::string& greeting)
{
greeting = "Hello " + name;
return SOAP_OK;
}
你可能觉得 hello.h
里面竟然没有引用 C++ 头文件 string
就用了 std::string
,其实并无影响。因为在代码文件中引用头文件 soapH.h
中会把这些都处理妥当的。
3. 生成 Web Services 源代码
那么代码文件中的 soapH.h
和 ns.nsmap
这两个头文件如何得到呢?这个很容易,可以输入命令行 soapcpp2 hello.h
自动生成:
$ soapcpp2 hello.h
** The gSOAP code generator for C and C++, soapcpp2 release 2.8.114
** Copyright (C) 2000-2021, Robert van Engelen, Genivia Inc.
** All Rights Reserved. This product is provided "as is", without any warranty.
** The soapcpp2 tool and its generated software are released under the GPL.
** ----------------------------------------------------------------------------
** A commercial use license is available from Genivia Inc., contact@genivia.com
** ----------------------------------------------------------------------------
Saving soapStub.h annotated copy of the source interface header file
Saving soapH.h serialization functions to #include in projects
Using ns service name: Service
Using ns service style: document
Using ns service encoding: literal
Using ns schema namespace: http://tempuri.org/ns.xsd
Saving ns.wsdl Web Service description
Saving ns.hello.req.xml sample SOAP/XML request
Saving ns.hello.res.xml sample SOAP/XML response
Saving ns.xsd XML schema
Saving ns.nsmap namespace mapping table
Saving soapClient.cpp client call stub functions
Saving soapClientLib.cpp client stubs with serializers (use only for libs)
Saving soapServer.cpp server request dispatcher
Saving soapServerLib.cpp server request dispatcher with serializers (use only for libs)
Saving soapC.cpp serialization functions
Compilation successful
4. 编译项目
用下面命令编译生成目标代码 hello.cgi
程序。
g++ -o hello.cgi hello.cpp soapC.cpp soapServer.cpp stdsoap2.cpp
生等片刻,看一下当前文件夹,多出了一个新文件 hello.cgi
。
5. 部署
这个 cgi 文件,最简单的方法是部署在现成的 Web 服务器里面,比如 Apache 或 IIS 这类软件。
当然,也可以不借助外援,直接用 C 或 C++ 自己实现 Web 服务功能。我喜欢这种方法,回头专门写文章讨论这种方法。
本文没有进行部署,所以测试也就免了。感兴趣的朋友,看我的下一篇文章吧。
参考资料