A、通过命名空间和类名直接调用
示例:
WebService ws = new WebService()
string s = ws.HelloWorld()
B、通过添加WEB引用的方式调用,首先添加WEB引用,通过URL指向WEBSERVICE,
指定WEB引用名,假设为KK
示例:
kk.WebService n = new kk.WebService()
string ss=n.HelloWorld()
二、WebService在前台页面的JS 调用方法
1、首先通过下面的方法把Webservice在前台引用进来
<asp:ScriptManager runat="server">
<Services>
<asp:ServiceReference Path="WebService.asmx" InlineScript="True" />
</Services>
</asp:ScriptManager>
2、然后就可以通过JS程序进行调用,示例如下:
<script type="text/jscript">
function a()
{
WebService.HelloWorld(onresult)
}
//这里的onresult是回调函数
function onresult(result)
{
alert(result)
}
function b()
{
WebService.add(1,2,onreturn)
}
function onreturn(result)
{
alert(result)
}
//下面的'context'是上下文,可以通过回到函数通过重载的方式获得;
function c()
{
WebService.div(1,1,onresultC,onerror,'context')
}
function onresultC(res,c)
{
alert(res)
alert(c)
}
//onerror是获得异常信息的回调函数,下面给出了获得异常信息的方法
function onerror(error)
{
var a=""
a=String.format("获取服务器端异常的具体类型:{0}\t\n获取详细的异常描述信息:{1}\t\n获取造成异常的:{2}\t\n获取服务器端异常的堆栈
跟踪信息:{3}\t\n获取一个布尔值,表示异常是否是由于网络连接超时造成的{4}",
error.get_exceptionType(),
error.get_message(),
error.get_statusCode(),
error.get_stackTrace(),
error.get_timedOut())
alert(a)
}
a()
b()
c()
</script>
----自写小例子---
web Service---:
[WebMethod]
public string HelloWorld() {
return "Hello World,wwg"
}
[WebMethod]
public int AddWwg(int a,int b)
{
return a + b
}
exe---
using CallWebService.localhost //因为自己没有定义命名空间
namespace CallWebService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent()
}
private void button1_Click(object sender, EventArgs e)
{
Service serviceWwg = new Service()
int i1 = Int32.Parse(txt1.Text.ToString())
int i2 = Int32.Parse(txt2.Text.ToString())
int iResult = serviceWwg.AddWwg(i1, i2)
lb1.Text = iResult.ToString()
}
private void button2_Click(object sender, EventArgs e)
{
CallWebService.localhost.Service serviceWwg = new CallWebService.localhost.Service()
string strResult = serviceWwg.HelloWorld()
lb1.Text = strResult.ToString()
}
}
}
使用gsoap生成所需的WebService下载后的gsoap包为:(点击到我的资源中下载)
将他解压后,进入到文件夹:gsoap_2.8.18\gsoap-2.8\gsoap\bin\win32
里面有2个我们要用到的exe,wsdl2h.exe和soapcpp2.exe,如果缺少一个typemap.dat,则从gsoap_2.8.18\gsoap-2.8\gsoap下拷贝进来,最后就可以启用cmd,开始生成WebService了
我的做法是拷贝一个cmd的快捷方式进来,然后右键属性,把它的“起始位置”设置为F:\webSite\gsoap_2.8.18\gsoap-2.8\gsoap\bin\win32,应用后启动此快捷方式,那么 *** 作目录就为当前目录了。利用wsdl2h.exe,使用cmd生成WebService的头文件如下:
wsdl2h -o 头文件名 WSDL文件名或URL
说明:(注意大小写)
-o 文件名,指定输出头文件名
-n 命名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上命名空间前缀
这里我生成一个foxwelltech.h头文件,不使用STL,结果如下:
生成的foxwelltech.h就包含了所有预先写好的WebService函数接口。从cmd中可以看到该命令需要用到typemap.dat文件,所以如果没有该文件,会提示找不到文件,需要从别处拷贝过来。接下来,我们按照cmd最后的提示,进行下一步,用soapcpp2.exe来生成可用的.h和.cpp文件:
soapcpp2常用选项:(注意大小写)
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)
如果报错:Critical error: #import: Cannot open file "stlvector.h"for reading.
Hint: use option -I<path>(you candefine multiple paths separated with '')
则要使用-I选项指定gSOAP的 import文件路径
我使用的命令行是:
soapcpp2 -C -x foxwelltech.h -IF:\Website\gsoap_2.8.18\gsoap-2.8\gsoap\import
意为根据foxwelltech.h只生成客户端代码,不生成无用的xml文件,另外要引用一个import文件夹,结果如下:
最后的Compilation successful说明了一切,结果就是生成了一个nsmap命名空间文件,二个.h文件,三个.cpp文件
最后,我们新建一个C++的控制台工程来使用它们
注意:
1. 第一步生成的foxwelltech.h不用加进来,直接使用由它生成的后续.h和.cpp即可
2. stdsoap2.h和stdsoap2.cpp来自于路径:F:\Website\gsoap_2.8.18\gsoap-2.8\gsoap
3. 除nsmap文件外,其他6个都要添加到工程里面编译,然后添加测试代码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)