本文章参考引用了网上的不少内容,在此对他们表示感谢!!!
一、开发环境准备
  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)