從http://gsoap2.sourceforge.net/下載最新的gsoap2源碼包。
通過http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html(EXP1)初步瞭解了gsoap2的使用方法(下屬示例使用了該文章的例子)。
由於一直使用Qt做開發項目的文件管理,整理了個qt項目文件,如下:
1. 目錄結構
gsoap2 # gsoap2 開發文檔根目錄
│ gsoap.pri # 引入gsoap2開發用源碼文件
│ gsoap28.pro # 根項目文件
│
├─bin # gsoap2工具鏈(來自於sourceforge上下載的源碼包)及編譯後的二進制文件
│ soapcpp2.exe
│ wsdl2h.exe
│
├─gsoap # gsoap2開發用源碼文件所在目錄(來自於sourceforge上下載的源碼包)
│ .dirstamp
│ dom.c
│ dom.cpp
│ stdsoap2.c
│ stdsoap2.cpp
│ stdsoap2.h
│ typemap.dat
│
└─leaning # gsoap2應用程序所在根目錄
│ leaning.pri # gsoap2應用用的源碼及命令頭文件
│ leaning.pro # 應用程序管理
├─nsmap # 接口定義文件所在目錄
│ add.h # 接口文件名字必須與gsoap2項目中GSOAP_NAME值一樣
│ calc.h
├─add # 服務器應用目錄
│ add.pro # 服務器項目
│ main.cpp # 項目源碼(來自於(EXP1)所述文檔)
├─add_client # 客戶端應用目錄
│ add_client.pro # 客戶端項目
│ main.cpp # 客戶端源碼(來自於(EXP1)所述文檔)
├─calc
│ calc.pro
│ main.cpp
├─calc_client
calc_client.pro
main.cpp
其中add.cpp、add_client.cpp分別爲服務端和客戶端的例子程序(來自於http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html)
gsoap2應用項目需要放在learning目錄下。
2. gsoap2應用程序項目
控制文件源碼及項目舉例,目的是爲了簡化應用開發的配置工作(當前僅在windows下測試過可用)。
gsoap28.pro
TEMPLATE = subdirs
SUBDIRS += leaning
gsoap.pri
INCLUDEPATH += $${PWD}/gsoap
HEADERS += $${PWD}/gsoap/stdsoap2.h
contains(CONFIG,use_c_gsoap_api) {
SOURCES += $${PWD}/gsoap/stdsoap2.c \
$${PWD}/gsoap/dom.c
} else {
SOURCES += $${PWD}/gsoap/stdsoap2.cpp \
$${PWD}/gsoap/dom.cpp
}
LIBS += -lws2_32
leaning.pri
DESTDIR = $${PWD}/../bin
include($${PWD}/../gsoap.pri)
INCLUDEPATH += $${PWD}/nsmap
#contains(CONFIG,soap_server) {
!exists(./temp):system("mkdir temp")
SOAP_GEN_DIR= ./temp/$${GSOAP_NAME}
!exists($${SOAP_GEN_DIR}):system("cd temp && mkdir $${GSOAP_NAME}")
!exists($${SOAP_GEN_DIR}/$${GSOAP_NAME}.wsdl) {
system("soapcpp2.exe -d./$${SOAP_GEN_DIR} ./nsmap/$${GSOAP_NAME}.h")
}
#}
SOAP_GEN_DIR= $${PWD}/temp/$${GSOAP_NAME}
SOAP_M_HEADERS += $${SOAP_GEN_DIR}/soapH.h \
$${SOAP_GEN_DIR}/soapStub.h
SOAP_M_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp \
$${SOAP_GEN_DIR}/soapServer.cpp
SOAP_C_HEADERS += $${SOAP_GEN_DIR}/soapH.h\
$${SOAP_GEN_DIR}/soapStub.h
SOAP_C_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp \
$${SOAP_GEN_DIR}/soapClient.cpp
SOAP_L_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp \
$${SOAP_GEN_DIR}/soapClientLib.cpp \
$${SOAP_GEN_DIR}/soapServerLib.cpp
SOAP_CP_OTHERS += $${SOAP_GEN_DIR}/$${GSOAP_NAME}.*.req.xml \
$${SOAP_GEN_DIR}/$${GSOAP_NAME}.*.res.xml \
$${SOAP_GEN_DIR}/ns.xsd \
$${SOAP_GEN_DIR}/$${GSOAP_NAME}.nsmap
INCLUDEPATH += $${SOAP_GEN_DIR}
contains(CONFIG,soap_server) {
TARGET = $${GSOAP_NAME}
HEADERS += $${SOAP_M_HEADERS}
SOURCES += $${SOAP_M_SOURCES}
QMAKE_CLEAN += $${SOAP_GEN_DIR}/$${GSOAP_NAME}.wsdl \
$${SOAP_M_HEADERS} \
$${SOAP_M_SOURCES} \
$${SOAP_C_HEADERS} \
$${SOAP_C_SOURCES} \
$${SOAP_CP_OTHERS} \
$${SOAP_L_SOURCES}
} else {
TARGET = $${GSOAP_NAME}_client
HEADERS += $${SOAP_C_HEADERS}
SOURCES += $${SOAP_C_SOURCES}
}
HEADERS += $${PWD}/nsmap/$${GSOAP_NAME}.h
leaning.pro
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += add \
add_client \
calc \
calc_client
add.pro
GSOAP_NAME = add
TEMPLATE = app
CONFIG += console soap_server
include(../leaning.pri)
HEADERS +=
SOURCES += \
main.cpp
add_client.pro
GSOAP_NAME = add
TEMPLATE = app
CONFIG += console
include(../leaning.pri)
HEADERS +=
SOURCES += \
main.cpp
3. 編譯後的項目目錄結構
nsmap下的接口文件爲手動編輯所得(c的接口定義,通過它生成gsoap項目所需的源碼文件)。
temp目錄爲編譯中間產物,由編譯時自動產生。
gsoap2
│ gsoap.pri
│ gsoap28.pro
│ gsoap28.pro.user
│ mmsys.env
│
├─bin
│ add.exe
│ add_client.exe
│ calc.exe
│ calc_client.exe
│ soapcpp2.exe
│ wsdl2h.exe
│
├─gsoap
│ .dirstamp
│ dom.c
│ dom.cpp
│ stdsoap2.c
│ stdsoap2.cpp
│ stdsoap2.h
│ typemap.dat
│
└─leaning
│ leaning.pri
│ leaning.pro
│
├─add
│ add.pro
│ main.cpp
│
├─add_client
│ add_client.pro
│ main.cpp
│
├─calc
│ calc.pro
│ main.cpp
│
├─calc_client
│ calc_client.pro
│ main.cpp
│
├─nsmap
│ add.h
│ calc.h
│
└─temp
├─add
│ add.add.req.xml
│ add.add.res.xml
│ add.nsmap
│ add.wsdl
│ ns.xsd
│ soapC.cpp
│ soapClient.cpp
│ soapClientLib.cpp
│ soapH.h
│ soapServer.cpp
│ soapServerLib.cpp
│ soapStub.h
│
└─calc
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
soapC.cpp
soapClient.cpp
soapClientLib.cpp
soapH.h
soapServer.cpp
soapServerLib.cpp
soapStub.h
4. gsoap2的動態庫項目
暫未涉及,學習後再補