天天看点

使用gsoap访问c#编写的webservices入门

本文章参考引用了网上的不少内容,在此对他们表示感谢!!!

一、开发环境准备

  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)

转载于:https://www.cnblogs.com/mark200106/archive/2007/08/31/876505.html