Linux平台下基于C++语言使用gSOAP开发Web Service服务端和客户端程序

http://blog.csdn.net/acs713/article/details/9421053

4、C++版本的程序:

(1)头文件不变,还是SmsWBS.h

  1. //gsoap ns service name: SmsWBS  
  2. //gsoap ns service style: rpc  
  3. //gsoap ns service namespace: http://192.168.1.102:9000/SmsWBS.wsdl  
  4. //gsoap ns service location: http://192.168.1.102:9000  
  5. //gsoap ns service encoding: encoded  
  6. //gsoap ns schema namespace: urn:SmsWBS  
  7.   
  8. int ns__add(int num1, int num2, int *sum);  


 

(2)编写一个万能的Makefile文件:(此文件稍作改动可以移植到任何工程中)


  1. server := SmsWBSserver  
  2. client := SmsWBStest  
  3.                                                               
  4. #your gsoap install directory  
  5. GSOAP_DIR=../../gsoap-2.8  
  6.   
  7. #web service name,added by danny  
  8. WSNAME0=soapSmsWBS  
  9.                                                               
  10. #compiler  
  11. CORSS_COMPILER =   
  12. G++ :=$(CORSS_COMPILER)g++  
  13.                                                               
  14. #flags  
  15. LIBS:=  -lpthread -lm  
  16. INCLS := -I ./  
  17. CFLAGS := -g -O2 -Wall -Wno-deprecated-declarations  
  18.                                                               
  19. #files  
  20. WSDL_FILES := SmsWBS.h  
  21. GSOAP_FILES :=$(WSNAME0)Proxy.cpp $(WSNAME0)Proxy.h $(WSNAME0)Service.h $(WSNAME0)Service.cpp soapC.cpp soapH.h soapStub.h  
  22. CP_FILES := stdsoap2.h stdsoap2.cpp  
  23. COM_SOURCES := soapC.cpp  stdsoap2.cpp  
  24. COM_OBJS := $(COM_SOURCES:.cpp=.o)  
  25. SERVER_SOURCES := $(server).cpp $(WSNAME0)Service.cpp  
  26. SERVER_OBJS := $(SERVER_SOURCES:.cpp=.o)  
  27. CLIENT_SOURCES := $(client).cpp $(WSNAME0)Proxy.cpp  
  28. CLIENT_OBJS := $(CLIENT_SOURCES:.cpp=.o)  
  29.                                                               
  30. TYPEMAP = $(wildcard *typemap.dat)  
  31. ifeq ( , $(TYPEMAP))  
  32. TYPEMAP = $(GSOAP_DIR)/gsoap/typemap.dat  
  33. endif  
  34. #MAKE  
  35. .PHONY: all     
  36. all: wsdl gsoap cp $(client) #$(server)  
  37.                                                               
  38. $(server):$(SERVER_OBJS) $(COM_OBJS)  
  39.     $(G++) $(INCLS) $(CFLAGS) -o $@ $^ $(LIBS)  
  40. $(client):$(CLIENT_OBJS) $(COM_OBJS)  
  41.     $(G++) $(INCLS) $(CFLAGS) -o $@ $^ $(LIBS)  
  42. $(COM_OBJS) $(CLIENT_OBJS) $(SERVER_OBJS):%.o:%.cpp  
  43.     $(G++) $(INCLS) $(CFLAGS) -o $@ -c $^    
  44.                                                               
  45. wsdl:  
  46. ifneq ($(WSDL_FILES), $(wildcard $(WSDL_FILES)))  
  47.     $(GSOAP_DIR)/gsoap/bin/linux386/wsdl2h -o $(TYPEMAP) $(wildcard *.wsdl) -o $(WSDL_FILES)  
  48. endif  
  49. gsoap:  
  50. ifneq ($(GSOAP_FILES), $(wildcard $(GSOAP_FILES)))  
  51.     $(GSOAP_DIR)/gsoap/bin/linux386/soapcpp2 -i  $(WSDL_FILES) -I $(GSOAP_DIR)/gsoap/import  
  52. endif  
  53. cp:  
  54. ifneq ($(CP_FILES), $(wildcard $(CP_FILES)))  
  55.     @cp $(GSOAP_DIR)/gsoap/stdsoap2.cpp $(GSOAP_DIR)/gsoap/stdsoap2.h ./ -v  
  56. endif  
  57.                                                               
  58. #clean  
  59. clean:  
  60.     @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版本类似,只是服务端运行时没有提示信息


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值