Linux下gSOAP的使用

來源:互聯網
上載者:User
摘自: http://www.svnclub.com/?q=node/416
1、下載gSOAP在gSOAP官網中可以找到最新的gSOAP安裝包以及相關的文檔gSOAP官網:http://www.cs.fsu.edu/~engelen/soap.htmlgSOAP:http://sourceforge.net/projects/gsoap2/2、安裝gSOAPa、解壓zip壓縮包命令:unzip gsoap_2.7.17.zipb、進入解壓後產生的檔案夾gsoap-2.7命令:cd gsoap-2.7/c、切換到root使用者命令:su輸入密碼d、配置編譯環境在gsoap-2.7/檔案夾下有一個configure檔案,執行它,自動設定編譯環境命令:./configuree、編譯串連命令:makef、安裝gSOAP命令:make install可用wsdl2h或者soapcpp2查看gSOAP是否已經安裝成功用命令whereis gsoap查看gSOAP安裝到的位置3、編寫calc.h檔案a、建立一個檔案夾calc命令:mkdir calcb、進入calc命令:cd calcc、建立檔案calc.h,在檔案中寫入以下內容,儲存//gsoap ns service name: calc Simple calculator service//gsoap ns service style: rpc//gsoap ns service encoding: encoded//gsoap ns service namespace: http://localhost/calc.wsdl//gsoap ns service location: http://localhost/server.cgi//gsoap ns schema namespace: urn:calcint ns__add(double a, double b, double *result);int ns__sub(double a, double b, double *result);int ns__mul(double a, double b, double *result);int ns__div(double a, double b, double *result);int ns__pow(double a, double b, double *result);注意:a、以上的幾行注釋中,gsoap ns service不能刪除,但可以修改b、ns__add等的ns後面是兩個底線4、調用soapcpp2自動產生相關的檔案(為了方便代碼管理,在calc檔案夾下建立一個soap)當前工作目錄為calc/soap命令:soapcpp2 -i ../calc.h注意:可能會報錯,一般是不知道gsoap相關include檔案的位置,可以使用命令soapcpp2 -i ../calc.h -I /usr/include/gsoap5、編寫伺服器端代碼:server.cpp當前工作目錄:calc#include "soap/soapcalcService.h"#include <iostream>using namespace std;int main(int argc, char **argv) {calcService calc;int port = 65531;if (calc.run(port)) {cerr << "Calc service run failed" << endl;exit(0);}return 0;}int calcService::add(double a, double b, double* result) {*result = a + b;return SOAP_OK;}int calcService::sub(double a, double b, double* result) {*result = a - b;return SOAP_OK;}int calcService::mul(double a, double b, double* result) {*result = a * b;return SOAP_OK;}int calcService::div(double a, double b, double* result) {if (b) {*result = a / b;} else {return SOAP_FAULT;}return SOAP_OK;}int calcService::pow(double a, double b, double *result) {*result = ::pow(a, b);if (soap_errno == EDOM) {char *s = (char*) soap_malloc(this, 1024);sprintf(s, "Can't take the power of %f to %f", a, b);sprintf(s,"<error xmlns=\"http://tempuri.org/\">Can't take power of %f to %f</error>",a, b);return SOAP_FAULT;}return SOAP_OK;}6、編寫用戶端代碼:client.cpp#include "soap/soapcalcProxy.h"#include "soap/calc.nsmap"#include <iostream>using namespace std;int main(int argc, char **argv) {double a = 4;double b = 2;double result;calcProxy calc;calc.soap_endpoint = "http://localhost:65531";calc.add(a,b,&result);cout<<a<<"+"<<b<<"="<<result<<endl;calc.sub(a,b,&result);cout<<a<<"-"<<b<<"="<<result<<endl;calc.mul(a,b,&result);cout<<a<<"*"<<b<<"="<<result<<endl;calc.div(a,b,&result);cout<<a<<"/"<<b<<"="<<result<<endl;calc.pow(a,b,&result);cout<<a<<"^"<<b<<"="<<result<<endl;return 0;}7、編寫Makefile檔案:makefile、sources.mk、subdir.mk、soap/subdir.mk、objects.mk建立bin檔案夾當前工作目錄:calc/bin#檔案:makefileRM := rm -rf# 引入相關的組建檔案-include sources.mk-include subdir.mk-include soap/subdir.mk-include objects.mkifneq ($(MAKECMDGOALS),clean)ifneq ($(strip $(C++_DEPS)),)-include $(C++_DEPS)endififneq ($(strip $(C_DEPS)),)-include $(C_DEPS)endififneq ($(strip $(CC_DEPS)),)-include $(CC_DEPS)endififneq ($(strip $(SERVER_CPP_DEPS)),)-include $(SERVER_CPP_DEPS)endififneq ($(strip $(CLIENT_CPP_DEPS)),)-include $(CLIENT_CPP_DEPS)endififneq ($(strip $(CXX_DEPS)),)-include $(CXX_DEPS)endififneq ($(strip $(C_UPPER_DEPS)),)-include $(C_UPPER_DEPS)endifendif# 產生目標all: server client# 相關工具server: $(SERVER_OBJS) $(USER_OBJS)@echo '建立目標: $@'g++ -o"server" $(SERVER_OBJS) $(USER_OBJS) $(LIBS)@echo '完成建立目標: $@'@echo "\n"client: $(CLIENT_OBJS) $(USER_OBJS)@echo '建立目標: $@'g++ -o"client" $(CLIENT_OBJS) $(USER_OBJS) $(LIBS)@echo '完成建立目標: $@'@echo "\n"# 清空臨時檔案clean:-$(RM) $(SERVER_OBJS)$(CLIENT_OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(SERVER_CPP_DEPS)$(CLIENT_CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS)-@echo "\n"cleanall:-$(RM) $(SERVER_OBJS)$(CLIENT_OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(SERVER_CPP_DEPS)$(CLIENT_CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) server client-@echo "\n"cleanexe:-$(RM) server client-@echo "\n".PHONY: all clean dependents cleanall cleanexe=====================================================================================================#檔案:sources.mkO_SRCS := SERVER_CPP_SRCS := CLIENT_CPP_SRCS :=C_UPPER_SRCS := C_SRCS := S_UPPER_SRCS := OBJ_SRCS := ASM_SRCS := CXX_SRCS := C++_SRCS := CC_SRCS := SERVER_OBJS := CLIENT_OBJS :=C++_DEPS := C_DEPS := CC_DEPS := SERVER_CPP_DEPS := CLIENT_CPP_SRCS :=EXECUTABLES := CXX_DEPS := C_UPPER_DEPS := # 子目錄SUBDIRS := \soap \. \=====================================================================================================#檔案:sources.mkO_SRCS := SERVER_CPP_SRCS := CLIENT_CPP_SRCS :=C_UPPER_SRCS := C_SRCS := S_UPPER_SRCS := OBJ_SRCS := ASM_SRCS := CXX_SRCS := C++_SRCS := CC_SRCS := SERVER_OBJS := CLIENT_OBJS :=C++_DEPS := C_DEPS := CC_DEPS := SERVER_CPP_DEPS := CLIENT_CPP_SRCS :=EXECUTABLES := CXX_DEPS := C_UPPER_DEPS := # 子目錄SUBDIRS := \soap \. \=====================================================================================================#檔案:subdir.mk# 產生的相關參數SERVER_CPP_SRCS += \../server.cppSERVER_OBJS += \./server.o SERVER_CPP_DEPS += \./server.d CLIENT_CPP_SRCS += \../client.cppCLIENT_OBJS += \./client.o CLIENT_CPP_DEPS += \./client.d # 根據.cpp檔案產生.o檔案%.o: ../%.cpp@echo '建立目標: $<'g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"@echo '完成建立目標: $<'@echo "\n"=====================================================================================================#檔案:soap/subdir.mk# 產生的相關參數SERVER_CPP_SRCS += \../soap/soapC.cpp \../soap/soapcalcService.cpp \/usr/include/gsoap/stdsoap2.cppSERVER_OBJS += \./soap/soapC.o \./soap/soapcalcService.o \./soap/stdsoap2.oSERVER_CPP_DEPS += \./soap/soapC.d \./soap/soapcalcService.d \./soap/stdsoap2.d CLIENT_CPP_SRCS += \../soap/soapC.cpp \../soap/soapcalcProxy.cpp \/usr/include/gsoap/stdsoap2.cppCLIENT_OBJS += \./soap/soapC.o \./soap/soapcalcProxy.o \./soap/stdsoap2.oCLIENT_CPP_DEPS += \./soap/soapC.d \./soap/soapcalcProxy.d \./soap/stdsoap2.d # 根據.cpp檔案產生.o檔案soap/%.o: ../soap/%.cpp@echo '建立目標: $<'g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"@echo '完成建立目標: $<'@echo "\n"soap/%.o:/usr/include/gsoap/%.cpp@echo '建立目標: $<'g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"@echo '完成建立目標: $<'@echo "\n"=====================================================================================================#檔案:objects.mkUSER_OBJS :=LIBS :=8、編譯當前工作目錄:calc/binmake9、開啟服務端./server10、開啟用戶端./client11、檔案總覽(3個目錄, 42個檔案)calc// 根目錄|-- bin// 檔案夾,存放makefile,以及產生的.o、.d、可執行檔| |-- client| |-- client.d| |-- client.o| |-- makefile| |-- objects.mk| |-- server| |-- server.d| |-- server.o| |-- soap| | |-- soapcalcProxy.d| | |-- soapcalcProxy.o| | |-- soapcalcService.d| | |-- soapcalcService.o| | |-- soapC.d| | |-- soapC.o| | |-- stdsoap2.d| | |-- stdsoap2.o| | `-- subdir.mk| |-- sources.mk| `-- subdir.mk|-- calc.h// calc.h|-- client.cpp// 用戶端|-- server.cpp// 伺服器端`-- soap// 該檔案夾存放命令soapcpp2 -i ../calc.h產生的檔案|-- calc.add.req.xml|-- calc.add.res.xml|-- calc.div.req.xml|-- calc.div.res.xml|-- calc.mul.req.xml|-- calc.mul.res.xml|-- calc.nsmap|-- calc.pow.req.xml|-- calc.pow.res.xml|-- calc.sub.req.xml|-- calc.sub.res.xml|-- calc.wsdl|-- ns.xsd|-- soapcalcProxy.cpp|-- soapcalcProxy.h|-- soapcalcService.cpp|-- soapcalcService.h|-- soapC.cpp|-- soapH.h`-- soapStub.h
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.