Linux平台下基于C++语言使用gSOAP开发Web Service服务端和客户端程序
2013-07-23 13:26
821 查看
4、C++版本的程序:
(1)头文件不变,还是SmsWBS.h
(2)编写一个万能的Makefile文件:(此文件稍作改动可以移植到任何工程中)
(3)服务端程序SmsWBSserver.cpp:
#include "soapSmsWBSService.h"
#include "SmsWBS.nsmap"
int main(int argc, char **argv)
{
SmsWBSService sms;
if (argc < 2)
sms.serve(); /* serve as CGI application */
else
{
int port = atoi(argv[1]);
if (!port)
{
fprintf(stderr, "Usage: SmsWBSserver++ <port>\n");
exit(0);
}
/* run iterative server on port until fatal error */
if (sms.run(port))
{
sms.soap_stream_fault(std::cerr);
exit(-1);
}
}
return 0;
}
int SmsWBSService::add(int num1, int num2, int *sum)
{
*sum = num1 + num2;
return SOAP_OK;
}
以上的C和C++版本的Web Service服务端运行后,在本机或者其它机(windows系统也一样)浏览器中输入http://192.168.1.102:9000/SmsWBS?wsdl,会返回XML文件内容,并返回Web Service的功能函数描述,实现了允许客户端通过http的get操作来获取 SmsWBS.wsdl文件。
部分截屏:
(4)客户端程序SmsWBStest.cpp:
#include <stdio.h>
#include <stdlib.h>
#include "soapSmsWBSProxy.h"
#include "SmsWBS.nsmap"
int main(int argc, char **argv)
{
int result = -1;
char* server="http://localhost:9000";
int num1 = 0;
int num2 = 0;
int sum = 0;
if( argc < 3 )
{
printf("usage: %s num1 num2 \n", argv[0]);
exit(0);
}
num1 = atoi(argv[1]);
num2 = atoi(argv[2]);
SmsWBSProxy sms;
result = sms.add(num1, num2, &sum);
if (result != 0)
{
printf("soap err, errcode = %d \n", result);
}
else
{
printf("%d + %d = %d \n", num1, num2, sum);
}
return 0;
}
(5)编译运行,与C版本类似,只是服务端运行时没有提示信息
(1)头文件不变,还是SmsWBS.h
//gsoap ns service name: SmsWBS //gsoap ns service style: rpc //gsoap ns service namespace: http://192.168.1.102:9000/SmsWBS.wsdl //gsoap ns service location: http://192.168.1.102:9000 //gsoap ns service encoding: encoded //gsoap ns schema namespace: urn:SmsWBS int ns__add(int num1, int num2, int *sum);
(2)编写一个万能的Makefile文件:(此文件稍作改动可以移植到任何工程中)
server := SmsWBSserver client := SmsWBStest #your gsoap install directory GSOAP_DIR=../../gsoap-2.8 #web service name,added by danny WSNAME0=soapSmsWBS #compiler CORSS_COMPILER = G++ :=$(CORSS_COMPILER)g++ #flags LIBS:= -lpthread -lm INCLS := -I ./ CFLAGS := -g -O2 -Wall -Wno-deprecated-declarations #files WSDL_FILES := SmsWBS.h GSOAP_FILES :=$(WSNAME0)Proxy.cpp $(WSNAME0)Proxy.h $(WSNAME0)Service.h $(WSNAME0)Service.cpp soapC.cpp soapH.h soapStub.h CP_FILES := stdsoap2.h stdsoap2.cpp COM_SOURCES := soapC.cpp stdsoap2.cpp COM_OBJS := $(COM_SOURCES:.cpp=.o) SERVER_SOURCES := $(server).cpp $(WSNAME0)Service.cpp SERVER_OBJS := $(SERVER_SOURCES:.cpp=.o) CLIENT_SOURCES := $(client).cpp $(WSNAME0)Proxy.cpp CLIENT_OBJS := $(CLIENT_SOURCES:.cpp=.o) TYPEMAP = $(wildcard *typemap.dat) ifeq ( , $(TYPEMAP)) TYPEMAP = $(GSOAP_DIR)/gsoap/typemap.dat endif #MAKE .PHONY: all all: wsdl gsoap cp $(client) #$(server) $(server):$(SERVER_OBJS) $(COM_OBJS) $(G++) $(INCLS) $(CFLAGS) -o $@ $^ $(LIBS) $(client):$(CLIENT_OBJS) $(COM_OBJS) $(G++) $(INCLS) $(CFLAGS) -o $@ $^ $(LIBS) $(COM_OBJS) $(CLIENT_OBJS) $(SERVER_OBJS):%.o:%.cpp $(G++) $(INCLS) $(CFLAGS) -o $@ -c $^ wsdl: ifneq ($(WSDL_FILES), $(wildcard $(WSDL_FILES))) $(GSOAP_DIR)/gsoap/bin/linux386/wsdl2h -o $(TYPEMAP) $(wildcard *.wsdl) -o $(WSDL_FILES) endif gsoap: ifneq ($(GSOAP_FILES), $(wildcard $(GSOAP_FILES))) $(GSOAP_DIR)/gsoap/bin/linux386/soapcpp2 -i $(WSDL_FILES) -I $(GSOAP_DIR)/gsoap/import endif cp: ifneq ($(CP_FILES), $(wildcard $(CP_FILES))) @cp $(GSOAP_DIR)/gsoap/stdsoap2.cpp $(GSOAP_DIR)/gsoap/stdsoap2.h ./ -v endif #clean clean: @rm -rfv *.o *~ *Proxy.h *.xml *.nsmap *.a *Object.h soapC.* $(WSNAME0)Service.* $(WSNAME0)Proxy.* $(server) $(client) *.nsmap $(CP_FILES) $(GSOAP_FILES)
(3)服务端程序SmsWBSserver.cpp:
#include "soapSmsWBSService.h"
#include "SmsWBS.nsmap"
int main(int argc, char **argv)
{
SmsWBSService sms;
if (argc < 2)
sms.serve(); /* serve as CGI application */
else
{
int port = atoi(argv[1]);
if (!port)
{
fprintf(stderr, "Usage: SmsWBSserver++ <port>\n");
exit(0);
}
/* run iterative server on port until fatal error */
if (sms.run(port))
{
sms.soap_stream_fault(std::cerr);
exit(-1);
}
}
return 0;
}
int SmsWBSService::add(int num1, int num2, int *sum)
{
*sum = num1 + num2;
return SOAP_OK;
}
以上的C和C++版本的Web Service服务端运行后,在本机或者其它机(windows系统也一样)浏览器中输入http://192.168.1.102:9000/SmsWBS?wsdl,会返回XML文件内容,并返回Web Service的功能函数描述,实现了允许客户端通过http的get操作来获取 SmsWBS.wsdl文件。
部分截屏:
(4)客户端程序SmsWBStest.cpp:
#include <stdio.h>
#include <stdlib.h>
#include "soapSmsWBSProxy.h"
#include "SmsWBS.nsmap"
int main(int argc, char **argv)
{
int result = -1;
char* server="http://localhost:9000";
int num1 = 0;
int num2 = 0;
int sum = 0;
if( argc < 3 )
{
printf("usage: %s num1 num2 \n", argv[0]);
exit(0);
}
num1 = atoi(argv[1]);
num2 = atoi(argv[2]);
SmsWBSProxy sms;
result = sms.add(num1, num2, &sum);
if (result != 0)
{
printf("soap err, errcode = %d \n", result);
}
else
{
printf("%d + %d = %d \n", num1, num2, sum);
}
return 0;
}
(5)编译运行,与C版本类似,只是服务端运行时没有提示信息
相关文章推荐
- Linux平台下基于C++语言使用gSOAP开发Web Service服务端和客户端程序
- Linux平台下基于C语言使用gSOAP开发Web Service服务端和客户端程序
- Linux下用gSOAP开发Web Service服务端和客户端程序(二)
- Linux下用gSOAP开发Web Service服务端和客户端程序(一)
- Linux下用gSOAP开发Web Service服务端和客户端程序(一)
- Linux下用gSOAP开发Web Service服务端和客户端程序
- Linux下用gSOAP开发Web Service服务端和客户端程序(一)
- gsoap 开发:基于wsdl文件和C++语言开发客户端程序
- 基于ONVIF协议的(IPC)客户端程序开发-3:使用gSOAP生成Web Services框架代码
- 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写
- 基于ONVIF协议的(IPC)客户端程序开发-5:使用gSOAP生成ONVIF框架代码
- 〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理
- 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写
- 基于gSOAP使用头文件的C语言版web service开发过程例子
- ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码
- Linux下使用Eclipse开发基于nms板卡的c/c++程序
- 基于gSOAP使用头文件的C语言版web service开发过程例子
- 建立基于MyEclipse 6和XFire开发的Web Service应用的客户端测试程序
- C++: windows使用gsoap开发webservice程序(单线程)---服务端
- Web Service (012---webservice使用CXF写基于Spring的WebService[服务端+客户端])