WebService是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。以前做这东西一直用的都是C#,因为这也是公司的主用语言。这几天给游戏开发公司做了一个小的CPP的类文件,实现的功能就是抓取系统的硬件信息,然后通过webservice提交到服务器上来,服务端很好实现,轻车熟路实现了三层结构也才两天就搞定了 http://b.gyyx.cn/DWInfo.asmx 接下来要实现的就是客户端的DEMO版本。C#到是经常做但这个VC的版本还真没做过,MFC也是刚了解没几天。只能硬着头皮来,我这里开发环境是VC++2008。在2008以前的版本把VC程序不管是在托管还是非托管模式下都可以使用WEB引用这个功能,然后VC会帮你封装出来个虚类,但是这个功能到了VC2008里就没有了。不管建托管还是非托管那个选项都是灰灰的。
我相信天下没有能难道我的事,网上去找了找开源库。发现大家用的最多的是一个开源的SOAP库gSOAP东西很好跨平台。不过之前没仔细看文档,可没少遇到钉子。说一下最后的解决方法吧。
写本文章时gSOAP最新版本是2.7。下回来后在gsoap\bin\win32目录下会有两个EXE文件,一个是把wsdl转为.h文件的,另一个是吧之前生成出来的.h文件转为相应代码的。
第一步要做的是把wsdl文件转为.h文件,参数我也是试了好几次才加了这些的.不加参数,引用到VC里会有无穷无尽的错误。
第进一步是生成相应的虚类代码。这里如果服务器端是C#写的会生成nsmap文件,我们这里要用有12的那套也就是SOAP1.2的标准的1.1那个版本会报错不知道是为什么。

然后引用上图中画红圈的文件到VC的工程里,图中的PostDataTogSoap类是我对gSOAP生成的代码做了一下二次封装。在你要封装的文件里先要引用如下两个文件
之后就很简单了,创建对象调用方法
GetHardwareInfoCPP.rar欢迎大家试用[为了方便没有VC9运行时的也能打开这个应用程序所以MFC库让我用静态编译的方法打进去了,文件会有点大:)]
李艳国
6月 23rd, 2010 at 15:18
你好热情啊,我要向你学习