VS2008 下的 gSOAP编程 客户端

本文档详细介绍了如何使用gSOAP工具包进行Web服务的客户端和服务器端开发,包括gSOAP的下载、wsdl2h及soapcpp2工具的使用方法,并提供了具体的代码示例,帮助开发者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gSOAP下载地址

http://cdnetworks-kr-1.dl.sourceforge.net/project/gsoap2/gSOAP/gsoap_2.8.8.zip


wsdl2h常用选项
  • -o 文件名,指定输出头文件
  • -n 名空间前缀 代替默认的ns
  • -c 产生纯C代码,否则是C++代码
  • -s 不要使用STL代码
  • -t 文件名,指定type map文件,默认为typemap.dat
  • -e 禁止为enum成员加上名空间前缀

 

soapcpp2.exe 的使用:

     常用选项
  • -C 仅生成客户端代码
  • -S 仅生成服务器端代码
  • -L 不要产生soapClientLib.c和soapServerLib.c文件
  • -c 产生纯C代码,否则是C++代码(与头文件有关)
  • -I 指定import路径(见上文)
  • -x 不要产生XML示例文件
  • -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

解压缩 在“命令窗口” (cmd) 中 进入目录gsoap2.8.8\gsoap\bin\win32

执行:

wsdl2h   -o WebClient.h http://192.168.10.11/service.asmx?wsdl             //服务地址 +?wsdl
soapcpp2 -C -I ..\..\import WebClient.h  //是大写i  不是l

把新生成的文件拷贝到工程目录中

soapClientLib.cpp 不需要拷贝到文件中 否则会产生连接错误


如果执行完这步会在当前目录下生成:

1,stdsoap2.cpp   ,soapC.cpp ,  soapServiceSoapProxy.cpp 不需要预编译。


2. 常见错误示例, error C1010 ,一般是预编译头文件的问题,在主函数中需要选预编译,添加 StdAfx.h

                       error  LNK2001  在网络编程中需要WSOCK32.lib ,添加上即可。



客户端代码


#include "soapServiceSoapProxy.h"
#include "ServiceSoap.nsmap"             //不添加这连个文件会产生 namespace 声明错误
#include "soapH.h"


int _tmain(int argc, _TCHAR* argv[])
{
   struct soap add_soap;  
    int result = 0;  
    soap_init(&add_soap);  

    //char *pServer = "http://10.10.16.157/DataInput/Service.asmx";
    _ns1__AddNewData Data;  
    Data.sData = "1234";
    Data.soap = &add_soap;

    _ns1__AddNewDataResponse Response; 
    Response.soap = &add_soap;

    DWORD dwStart = GetTickCount();

    //printf("%d", dwStart);

    int iErr = soap_call___ns2__AddNewData(&add_soap, NULL, NULL, &Data, &Response);
  
    if(add_soap.error)  
    {  
        printf("soap error:%d,%s,%s/n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );  
        result = add_soap.error;  
    }

    soap_destroy(&add_soap);
    soap_end(&add_soap);  
    soap_done(&add_soap);

    getchar();

    return 0;

}



AddNewData() 是服务的接口   使用wsdl2h  soapcpp2生成文件后

结构体名称前面会添加 _ns1__  、 _ns2__   等  是传送和接收服务调用用的。

soap_call___ns2__XXX 即是你调用的服务器接口。

还有个soap_call___ns3__XXX  没有使用 估计与上面的作用是一样的。


有的文章提到使用soap_call___ns1__XXX 我没有找到

服务器是用C#编写的



参考:

http://eggbucket.iteye.com/blog/1140148


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值