建立web服务
1.在wwwroot目录下建立一个叫做webservice的目录。
2.建立下面这样一个文件:
<%@ webservice language="c#" class="addnumbers"%>
using system;
using system.web.services;
public class addnumbers : webservice
{
[webmethod]
public int add(int a, int b){
int sum;
sum = a + b;
return sum;
}
}
3.将这个文件保存为addservice.asmx(asmx是扩展名),保存到webservice的目录中
4.现在我们建立了web服务,已经准备好客户端使用
5.现在,你可以用下面的url访问这个web服务:
http://ip地址/webservice/addservice.asmx/add?a=10&b=5
结果将以xml格式返回。
在客户机上部署这个服务
1.在命令行输入:
wsdl http://ip地址/webservice/mathservice.asmx /n:namesp /out:filename.cs
这个操作将建立一个称为filename.cs的文件
说明:wsdl 指的是webservices description language ,这个程序在program files\microsoft.net\frameworksdk\bin 目录中。
namesp是我们设置的名字空间的名字,将在后面部署这个服务的客户端的实现代码中使用到。
2.编译
csc /t:library /r:system.web.dll /r:system.xml.dll filename.cs
上述命令将生成一个dll文件,名字就是上面的asmx文件中的公共类的名字,在我们的例子中,就是:addnumbers.dll
3.将生成的dll文件放到部署机的wwwroot\bin目录中。
在部署机的asp/aspx 中调用这个web服务
<%@ import namespace = "namesp" %>
<script language = "c#" runat = "server">
public void page_load(object o, eventargs e){
int x = 10;
int y = 5;
int sum;
//instantiating the public class of the webservice
addnumbers an = new addnumbers();
sum = an.add(x,y);
string str = sum.tostring();
response.writeline(str);
}
</script>
private void button_click_(object sender, system.eventargs e)
{
//为一个webservice的代理类创建一个实例
asy.asynchronism somews = new asy.asynchronism();
//创建一个异步回调对象,构造函数的参数为回调的方法,该回调的方法必须包含一个异步操作状态类型的参数
system.asynccallback cb= new asynccallback(showmsg);
//开始进行异步通信,通常定义一个iasyncresult异步操作状态类型的变量来接收开始异步通信方法所返回的通信状态
//通过这个操作状态的实例就可以掌握当前通信状态。
//如:system.iasyncresult ar = somews.beginhelloworld(cb,somews);
somews.beginhelloworld(cb,somews);
}
void showmsg(iasyncresult ar) //必须要有一个iasyncresult类型的参数
{
//定义一个代理类的类型的变量接收所在回调方法的参数的异步操作信息
asy.asynchronism somews=(asy.asynchronism)ar.asyncstate;
//该代理类实例调用end</webmethod/>方法来获得webservice的结果
messagebox.show(somews.endhelloworld(ar));
}
方法二、
private void button_click_(object sender, system.eventargs e)
{
//为一个webservice的代理类创建一个实例
asy.asynchronism somews = new asy.asynchronism();
system.iasyncresult ar = somews.beginhelloworld(null,null);
ar.asyncwaithandle.waitone();
messagebox.show(somews.endhelloworld(ar));
}
方法一实现了请求和接收异步通信,运用起来比较灵活,工作的方法看起来也很像多线程的操作方式。
方法二虽然也实现了发送请求和接收结果异步通信,但是用在实际的程序中并没有达到所需要的效果。