C++利用gSoap发布WebService
2015-12-18 09:08
411 查看
工作中用到了C++发布WebService,选择使用gSoap发布。参考了网上很多的文章,最后发布成功。本文分为三步走
1、搭建WebService
2、返回字符串类型的参数
3、发布wsdl文件
下面是具体操作:
1、创建calc.h文件
//gsoap ns service name: calc
//gsoap ns service protocol: SOAP
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://ws.guyuan.com/
//gsoap ns service location: http://XX.XX.XX.XX:XX //IP:Port
//gsoap ns schema namespace: http://ws.guyuan.com/
int ns__sendString( char* strXMLParams, char** strXMLParams1);
int ns__add( int num1, int num2, int* sum );
2、将calc.h放到gsoap_2.8.19.zip解压后的\gsoap-2.8\gsoap\bin\win32 目录下
3、运行生成服务端文件命令 soapcpp2.exe -S -i –T -x calc.h
4、建一个WIN32控制台程序Server,将生成的下列文件加入到工程里
soapcalcProxy.cpp
soapcalcProxy.h
soapC.cpp
soapcalcService.h
soapcalcService.cpp
soapH.h
soapStub.h
calc.nsmap
stdsoap2.h
stdsoap2.cpp
其中stdsoap2.h和 stdsoap2.cpp这两个文件存在gsoap_2.8.8\gsoap-2.8\gsoap目录下面
5、添加main.cpp内容如下
6、浏览器输入:http://192.168.31.77:13578,如下图所示说明发布成功
7、运行生成服务端文件命令 soapcpp2.exe -C -i –T -x calc.h
8、建一个WIN32控制台程序Client,将生成的下列文件加入到工程里
calc.nsmap
soapC.cpp
soapcalcProxy.cpp
soapcalcProxy.h
socpClient.cpp
soapH.h
soapStub.h
stdsoap2.h
stdsoap2.cpp
9、客户端添加main.cpp内容如下
10、先运行服务端,再运行客户端,结果如下
11、发布wsdl文件
12、浏览器输入:http://192.168.31.77:13578
13、SoapUI测试(1)
参考文章:
1、搭建WebService
http://blog.csdn.net/flyfish1986/article/details/7563499 2、返回字符串类型的参数 http://blog.163.com/danshiming@126/blog/static/109412748201463151354885/ 3、发布wsdl文件
http://bbs.csdn.net/topics/350145082
工作中用到了C++发布WebService,选择使用gSoap发布。参考了网上很多的文章,最后发布成功。本文分为三步走
1、搭建WebService
2、返回字符串类型的参数
3、发布wsdl文件
下面是具体操作:
1、创建calc.h文件
//gsoap ns service name: calc
//gsoap ns service protocol: SOAP
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://ws.guyuan.com/
//gsoap ns service location: http://XX.XX.XX.XX:XX //IP:Port
//gsoap ns schema namespace: http://ws.guyuan.com/
int ns__sendString( char* strXMLParams, char** strXMLParams1);
int ns__add( int num1, int num2, int* sum );
2、将calc.h放到gsoap_2.8.19.zip解压后的\gsoap-2.8\gsoap\bin\win32 目录下
3、运行生成服务端文件命令 soapcpp2.exe -S -i –T -x calc.h
4、建一个WIN32控制台程序Server,将生成的下列文件加入到工程里
soapcalcProxy.cpp
soapcalcProxy.h
soapC.cpp
soapcalcService.h
soapcalcService.cpp
soapH.h
soapStub.h
calc.nsmap
stdsoap2.h
stdsoap2.cpp
其中stdsoap2.h和 stdsoap2.cpp这两个文件存在gsoap_2.8.8\gsoap-2.8\gsoap目录下面
5、添加main.cpp内容如下
#include "./Web/soapcalcService.h" #include "./Web/calc.nsmap“ int http_get(struct soap * soap); int main(int argc, char **argv) { calcService calc; calc.fget = http_get; while(1) { calc.run(13578); } return 0; } int calcService::add(int a, int b, int *result) { *result = a + b; return SOAP_OK; }<pre class="cpp" style="margin: 4px 0px; background-color: rgb(240, 240, 240);" name="code">int calcService::sendString(char *strXMLParams, char **strXMLParams1) { std::string strDevType(strXMLParams); int nBUfferLen = strDevType.length() + 1; *strXMLParams1 = (char *)soap_malloc(this, nBUfferLen); memset(*strXMLParams1, 0, nBUfferLen); memcpy(*strXMLParams1, strDevType.c_str(), strDevType.length()); return SOAP_OK; }
6、浏览器输入:http://192.168.31.77:13578,如下图所示说明发布成功
7、运行生成服务端文件命令 soapcpp2.exe -C -i –T -x calc.h
8、建一个WIN32控制台程序Client,将生成的下列文件加入到工程里
calc.nsmap
soapC.cpp
soapcalcProxy.cpp
soapcalcProxy.h
socpClient.cpp
soapH.h
soapStub.h
stdsoap2.h
stdsoap2.cpp
9、客户端添加main.cpp内容如下
#include "./Web/soapcalcProxy.h" #include "./Web/calc.nsmap" #include "iostream" using namespace std; const char server[] = "http://192.168.31.77:13578"; char* Send = "hello world"; char **temp; int main() { int a, b, result; calcProxy calc; calc.soap_endpoint = server; temp = new char *; while(1) { // add cout<<"输入a,b的值"<< endl; cin>>a>>b; calc.add(a, b, &result); printf("a = %d, b= %d ,result =%d \n\n", a, b, result); // calc.downloadCMAHistoryData(Send, temp); printf("the return string is:%s \n\n", *temp); } return 0; }
10、先运行服务端,再运行客户端,结果如下
11、发布wsdl文件
int http_get(struct soap * soap) { FILE *fd = NULL; fd = fopen("calc.wsdl", "rb"); if (!fd) return 404; soap->http_content = "text/xml“; 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; } fclose(fd); soap_end_send(soap); return SOAP_OK; }
12、浏览器输入:http://192.168.31.77:13578
13、SoapUI测试(1)
参考文章:
1、搭建WebService
http://blog.csdn.net/flyfish1986/article/details/7563499 2、返回字符串类型的参数 http://blog.163.com/danshiming@126/blog/static/109412748201463151354885/ 3、发布wsdl文件
http://bbs.csdn.net/topics/350145082
相关文章推荐
- 第十周项目3 - 利用二叉树遍历思想解决问题.cpp
- 第十周项目2 - 二叉树遍历的递归算法.cpp
- 第十周项目1 - 二叉树算法库.cpp
- VC++中用API调用对话框资源
- C++(简单工厂)
- CPP-static members
- codeblocks 打开cpp文件空白
- 0-1背包问题.(c++版)
- C 语言的数据,常量和变量
- 帮 C/C++ 程序员彻底了解链接器
- c++将基本类型转为字符串写入文件
- 实战c++中的vector系列--vector<unique_ptr<>>赋值给vector<unique_ptr<>>
- vs2013报错 无法打开包含文件 "winsock2.h" 的一种解决办法
- 实战c++中的vector系列--vector<unique_ptr<>>赋值给vector<unique_ptr<>>
- 程序设计C语言-静态链表及指针
- C语言 malloc
- 用C语言实现简单的三子棋小游戏
- C++11: std::forward
- C++开发者都应该使用的10个C++11特性
- VC++代码刷新桌面图标和任务栏图标