C++与Web接口对接

(1)wsdl.xml : 是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。

 一个WSDL文档通常包含7个重要的元素,即types( WebService用到的所有数据类型 )、importmessage( 指明一个操作所用到的数据类型。 )、portType WebService 所有提供的接口)、operation 服务中所支持的操作的抽象描述 )、binding 每个端口定义消息格式和协议细节 )、service( 服务的访问路径)元素。这些元素嵌套在definitions元素中,definitions是WSDL文档的根元素。

这是我收缩多余节点之后的wsdl.xml,大概可以看到除import之外的元素,operation存在于portType和binding的内部子节点。

生成一个wsdl.xml,请参考http://blog.csdn.net/juxtapose/article/details/1779849

关于wsdl.xml的了解不做过多介绍,如果要兴趣可以看http://blog.csdn.net/xiaobai20131118/article/details/34184773这篇博客

(2)gsoap-2.8:gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。 gSOAP是一种跨平台的C和 C++软件开发工具包。生成C/C++的RPC代码(RPC:远程过程调用,它是一种通过网络从远程计算机程序上请求服务),XML数据绑定,对SOAP Web服务和其他应用形成高效的具体架构解析器,它们都受益于一个XML接口。 这个工具包提供了一个全面和透明的XML数据绑定解决方案,Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。在网上可以下载到这个库,建议下载gsoap-2.8。

(3)addStdafx.vbs: 基于Visual Basic的脚本语言 .

Dim fso
Set fso = CreateObject("scripting.filesystemobject")
Set fdr=fso.GetFolder(".\")
Set subfdr=fdr.Files
For Each CppFile In subfdr
	If Right(CppFile.Name, 4) = ".cpp" Then
		Set batfile=fso.OpenTextFile(CppFile.Name)
		If not batfile.AtEndOfStream then
			txt=batfile.ReadAll
			txt="#include ""stdafx.h"""+ chr(10)+ txt
			Set batfile=fso.OpenTextFile(CppFile.Name,2)
			batfile.Write txt
			batfile.Close
		end if
	end if
next

(4)要使用wsdl.xml文档还需要一个CreateSoap.bat, bat文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。

@echo off

@rem ---------------------------------设置--------------------------------------
@rem 1.gSoap路径
set hhsoappath=E:\libs\gsoap-2.8\

@rem 2.WSDLL服务地址 多个地址或本地wsdl格式xml文件时用空格分开
set hhsoapwsdllpath=E:\WebServiceDlls\aaa\wsdl.xml

@rem 3.目标路径(将生成后的文件拷贝到此路径)
set hhdestpath=E:\test

@rem 4.生成的头文件名,一般不用改
set hhcreath=gsoap-http.h

@rem ---------------------------------设置--------------------------------------

@rem 拷文件
copy %hhsoappath%\gsoap\stdsoap2.h   stdsoap2.h
copy %hhsoappath%\gsoap\stdsoap2.cpp stdsoap2.cpp
copy %hhsoappath%\gsoap\bin\win32\soapcpp2.exe soapcpp2.exe
copy %hhsoappath%\gsoap\bin\win32\wsdl2h.exe wsdl2h.exe

@rem 调用wsdl2h程序
call wsdl2h.exe -I "%hhsoappath%gsoap\WS" -o %hhcreath% %hhsoapwsdllpath%

@rem 调用soapcpp2程序
call soapcpp2.exe -I "%hhsoappath%gsoap\import" %hhcreath%

call addStdafx.vbs

@rem 拷贝生成的文件
copy callUpload.h %hhdestpath%
copy soapH.h %hhdestpath%
copy soapStub.h %hhdestpath%
copy stdsoap2.h %hhdestpath%
copy soapC.cpp %hhdestpath%
copy soapClient.cpp %hhdestpath%
copy soapClientLib.cpp %hhdestpath%
copy soapServer.cpp %hhdestpath%
copy soapServerLib.cpp %hhdestpath%
copy stdsoap2.cpp %hhdestpath%
copy wsdl2h.exe %hhdestpath%
copy soapcpp2.exe %hhdestpath%
@rem nsmap文件名称不是固定的,需要生成后手动复制
copy IPmsWebServiceSoapBinding.nsmap %hhdestpath%
@echo off
set hhsoappath
set hhsoapwsdllpath
set hhcreath

@pause

使用时根据实际情况,修改1,2,3的路径。

(5)首先新建一个项目,然后双击CreateSoap.bat文件,把自动生成的.h,cpp,nsmap文件全部拷贝到新建的项目下就可以使用了,soapStub.h里可以看到可以调用的所有函数。

猜你喜欢

转载自my.oschina.net/u/2930533/blog/1606340