在学vb的时候学到了api函数,今天学习asp.net中的web server,web server和api函数一样都是为用户提供了一个接口,客户端可以在远程直接调用,不需要知道它具体的算法,难易程度,可以直接使用方法。
一.基础
概念:
1.web服务是应用程序
2.它向外界暴露了一个能够通过web进行调用的api
3.能够用编程的方法,通过web来调用这个应用程序
4.把调用这个web服务应用程序叫做客户。
运行流程
1.目录:web service提供了一个用以定位其他单位提供的web service的中心位置。其中,uddi就是web service目录。Uudi通俗一点说就是建立web service时使用注册到uudi。如果使用服务,就来看uudi。
2.发现:使用wsdl对特定的web service进行描述,一般都是xml文档。其中,wsdl用于描述WebService及其函数、参数和返回值。可以用来向用户介绍Web service的功能,每个函数调用时的参数。
3.联网形式:使用开放式联网形式进行通讯,主要使用sopa通讯协议。
特点:
1.通过web进行访问。
2.使用接口进行调用
3.在服务注册表中注册
4.使用标准web协议通信
5.松散耦合
二.模拟网上购物的实例
需求
web server提供了可以使买家付款给卖家的方法方法和获取商品列表的方法;客户端调用这个两个方法,客户端选中购买的商品后,单击‘购买’按钮就可以买家付款给卖家,并显示买家消费金额。
代码实现
1.web service代码
public class serviceShopping : System.Web.Services.WebService
{
[WebMethod]
//获取商品
public DataSet getGoods()
{
SqlConnection con = new SqlConnection("server=.;database=shop;uid=sa;pwd=123456;");
con.Open();
SqlDataAdapter adr = new SqlDataAdapter();
adr.SelectCommand = new SqlCommand("select * from goods", con);
DataSet ds = new DataSet();
adr.Fill(ds, "goods");
con.Close();
return ds;
}
[WebMethod]
//购物
public string shopping(int sum)
{
try
{
//买家买东西
this.buy(sum);
//卖家卖东西
this.sell(sum);
return "交易成功,消费:"+sum;
}
catch
{
return "交易失败";
}
}
//买家买东西
private void buy(int sum)
{
SqlConnection con = new SqlConnection("server=.;database=shop;uid=sa;pwd=123456;");
con.Open();
SqlCommand cmd = new SqlCommand("update buy set money=money-" + sum.ToString() + " where buyer='A'", con);
cmd.ExecuteNonQuery();
con.Close();
}
//卖家卖东西
private void sell(int sum)
{
SqlConnection con = new SqlConnection("server=.;database=shop;uid=sa;pwd=123456;");
con.Open();
SqlCommand cmd = new SqlCommand("update sell set money=money+" + sum.ToString() + " where seller='B'", con);
cmd.ExecuteNonQuery();
con.Close();
}
}
2.客户端中引用web service的步骤
备注:地址是运行web service后地址栏中地址。
3.客户端代码
客户端html代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
</asp:CheckBoxList>
<asp:Button ID="Button1" runat="server" Text="购买" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
客户端后台代码
public partial class UseServerShopping : System.Web.UI.Page
{
//绑定商品列表
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
myserviceShopping.serviceShoppingSoapClient getGoodslist = new myserviceShopping.serviceShoppingSoapClient();
this.CheckBoxList1.DataSource = getGoodslist.getGoods(); //绑定商品列表
this.CheckBoxList1.DataTextField = "goodsname";
this.CheckBoxList1.DataValueField = "cost";
this.CheckBoxList1.DataBind();
}
}
//购买商品
protected void Button1_Click(object sender, EventArgs e)
{
//商品价格
int totalCost=0;
//计算商品总共价格
for (int i = 0; i < CheckBoxList1.Items.Count; i++) //循环checjboxlist1的个数
{
if (CheckBoxList1.Items[i].Selected == true) //checjboxlist1被选中
{
totalCost =totalCost+ Convert.ToInt32(CheckBoxList1.Items[i].Value); //计算商品总价格
}
}
myserviceShopping.serviceShoppingSoapClient buyGoods = new myserviceShopping.serviceShoppingSoapClient();
buyGoods.shopping(totalCost); //调用服务中使买家付款给卖家
Response.Write(buyGoods.shopping(totalCost));
}
}
源码地址
三.总结
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。