gsoap调用C#开发的WebService

1 服务端

1.1 WebService制作

首先,打开VS,打开“文件-新建-网站”,选择“ASP.NET Web服务”。修改Service.cs代码,如下:

using System;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Xml.Linq;

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

// 若要允许使用 ASP.NET AJAX从脚本中调用此 Web服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

public class Service : System.Web.Services.WebService

{

    public Service () {

        //如果使用设计的组件,请取消注释以下行

        //InitializeComponent();

    }

  /*  [WebMethod]

    public string HelloWorld() {

        return "Hello World";

    }*/

    [WebMethod(Description="求和的方法")]

     public double addition(double i,double j)

     {

         return i + j;

     }

     [WebMethod(Description="求差的方法")]

     public double subtract(double i, double j)

     {

         return i - j;

     }

     [WebMethod(Description="求积的方法")]

     public double multiplication(double i, double j)

     {

         return i * j;

     }

     [WebMethod(Description="求商的方法")]

     public double division(double i, double j)

     {

         if (j != 0)

             return i / j;

         else

             return 0;

     }

}

运行可以看到我们自己写的可以被调用的方法。

1.2 WebService发布

IIS上发布此WebService,略。如何修改监听端口?点击网站,点击“绑定”,即可修改监听端口。

2 客户端

在网页上输入http://172.16.201.68/Service.asmx?wsdl,另存为server.wsdl

或者直接依据网址:wsdl2h -o server.h -s -t ..\..\typemap.dat http://218.242.137.27:9001/?wsdl

下载gsoap库,以gsoap_2.8.13为例,地址为:http://sourceforge.net/projects/gsoap2/

server.wsdl考到win32下,打开CMD,执行:

wsdl2h.exe -o server.h -s -t .\typemap.dat server.wsdl

-s表示仅生成客户端,-t指定type map文件,此句过后,生产service.h,再执行:

soapcpp2.exe server.h -I  ..\..\import  (Linux下:soapcpp2.exe server.h -I  ..\..\import

此句过后,生成很多框架代码。

新建控制台工程testclient,添加gsoap库下的stdsoap2.hstdsoap2.cpp,及刚刚生成的soapH.hsoapC.cppsoapStub.hsoapClient.cppServiceSoap.nsmaptestclient工程,引入wsock32.lib库。

以测试加法为例,代码如下:


int add(const char* server, double num1, double num2, double &sum)
{
 struct soap add_soap;
 int result = 0;
 soap_init(&add_soap);
  soap_set_namespaces(&add_soap, namespaces);
 //该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__add前面加上
 _tempuri__addition element; 
 element.i = num1;
 element.j = num2;
 _tempuri__additionResponse tResult;
    soap_call___tempuri__addition( &add_soap, server, "",&element,&tResult);
 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;
 }
 sum = tResult.additionResult;
 soap_end(&add_soap);
 soap_done(&add_soap);
 return result;
}

int main(intargc,char **argv)

{

   int result = -1;

   // char* server="http://localhost:4567";

   char* server="http://172.16.201.68/Service.asmx";

   double num1 = 0;

   double num2 = 0;

   double sum = 0;

   num1 = 10;

   num2 = 10;

   result = add(server, num1, num2, sum);

   if (result != 0)

   {

      printf("soap err,errcode = %d\n",result);

   }

   else

   {

      printf("%f+%f=%f\n",num1,num2,sum );

   }

   return 0;

}

执行后,显示10.0+10.0=20.0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值