本文章参考引用了网上的不少内容,在此对他们表示感谢!!!
一、开发环境准备
1、从gSoap官方网站 http://gsoap2.sourceforge.net 下载软件
2、根据文档安装配置gSoap(略)
二、如何开发WEB服务客户端
1、基本流程
(1)从WEB服务提供者获取WEB Service的WSDL文件;
(2)使用gSoap工具wsdl2h,根据WSDL文件生成C/C++语法结构的头文件;
(3)使用gSoap预编译器soapcpp2,根据.h头文件中定义的信息来生成客户端代码框架;
(4)实现客户端例程;
(5)GCC编译客户端,生成可执行代码。
例子:
Services.cs
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace="http://www.sohu.com")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string HelloWorld(String name) {
return "Hello World: "+name;
}
[WebMethod]
public string Hello() {
return "Hello World";
}
[WebMethod]
public int MyAdd(int i,int j) {
return i+j;
}
}
得到hello.wsdl
wsdl2h -c hello.wsdl
soapcpp2 -c hello.h
实现客户端例程hello.c
下面函数中用到的结构和函数可以从soapH.h和soapClient.c和soapStub.h中进行查找
#include "soapH.h"
#include "ServiceSoap.nsmap"
int main()
{
struct soap soap;
struct _ns1__HelloWorld hh;
struct _ns1__HelloWorldResponse ret;
struct _ns1__Hello hello;
struct _ns1__HelloResponse hret;
struct _ns1__MyAdd myadd;
struct _ns1__MyAddResponse mret;
myadd.i=10;
myadd.j=20;
soap_init(&soap);
if(soap_call___ns2__Hello(&soap,NULL,NULL,&hello,&hret)==SOAP_OK)
{
printf("call Hello():\t%s\n",hret.HelloResult);
}
if(soap_call___ns2__MyAdd(&soap,NULL,NULL,&myadd,&mret)==SOAP_OK)
{
printf("call MyAdd():\t%d\n",mret.MyAddResult);
}
//
hh.name=malloc(20);
strcpy(hh.name,"haha");
if (soap_call___ns2__HelloWorld(&soap, NULL, NULL, &hh, &ret) == SOAP_OK)
printf("call HelloWorld()\t%s\n",ret.HelloWorldResult);
else
soap_print_fault(&soap, stderr);
free(hh.name);
//
soap_destroy(&soap);
soap_end(&soap);
soap_done(&soap);
return 0;
}
写个Makefile文件(我使用的环境是FC7)
GSOAP_PATH=/home/wzp/gsoap-linux-2.7
SOAPC=${GSOAP_PATH}/stdsoap2.c
CC=gcc
COFLAGS=-O2
CWFLAGS=-Wall
CIFLAGS=-I ${GSOAP_PATH}
CMFLAGS=
CFLAGS= $(CWFLAGS) $(COFLAGS) $(CIFLAGS) $(CMFLAGS)
hello:hello.c soapC.c soapClient.c
$(CC) $(CFLAGS) -o hello hello.c soapC.c soapClient.c $(SOAPC)