您的位置:首页 > 编程语言 > C#

gsoap调用C#开发的WebService

2015-08-19 11:34 591 查看

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.h,stdsoap2.cpp,及刚刚生成的soapH.h,soapC.cpp,soapStub.h,soapClient.cpp,ServiceSoap.nsmap到testclient工程,引入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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: