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。
相关文章推荐
- C#调用Web Service时的身份验证
- C#播放声音
- C# 测试PDF是否能打开 .
- 关于对象实例序列化加密解密并写入文件的技巧
- C#启动另外一个C#程序,并传递参数
- c# 查询 插入 access db 2007
- c#索引器
- C#精髓 第四讲 GridView 72般绝技
- 【C#】窗体动画效果
- C#多态性详解
- C# interface学习经验浅谈
- C#-JudgeSystem判题系统-安装和熟悉C#开发环境
- C#-JudgeSystem判题系统-客户端和多线程
- C#-JudgeSystem判题系统-C#编译C程序
- C#-JudgeSystem判题系统-判题系统
- C#-JudgeSystem判题系统-开放实验总结
- 《C#入门经典》笔记
- 关于一个给二维数组循环赋值问题的本渣研究出的解决办法[C#]
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- System.Reflection.BindingFlags 说明