在现代软件开发中,经常需要在不同平台之间共享和重用代码。例如,一个应用程序可能同时拥有Web版本和桌面版本,并且需要在两个版本中使用相同的任务、接口、类或方法。在这种情况下,可能会考虑使用Web服务来实现代码的重用。本文将探讨Web服务的概念、组成、工作原理以及如何在.NETWeb和桌面应用程序中使用Web服务。
Web服务是一种技术框架,允许机器对机器(M2M)通过网络进行交互。它使用XML作为通信协议,并且不依赖于任何特定的操作系统或编程语言。
基本的Web服务平台包括XML和HTTP。所有标准的Web服务都使用以下组件:
这些组件共同工作,使得不同应用程序之间能够进行标准化的通信。
Web服务之所以流行,是因为它们允许使用不同编程语言(如PHP、C++、VB或C#)编写的应用程序遵循一套标准化的协议来共享和访问数据。这样,两个程序就可以在不考虑操作系统、数据库或编程语言兼容性的情况下进行通信。这种独特的特性被称为面向服务的架构(SOA)。
客户端程序将客户端页面信息打包成一个SOAP消息。这个SOAP消息作为HTTP POST请求的正文发送到Web服务。Web服务解包SOAP请求并将其转换为应用程序可以理解的命令。应用程序按要求处理信息,并用新的唯一数据进行响应。然后,Web服务将响应打包成另一个SOAP消息,作为对客户端程序HTTP请求的响应发送回去。客户端程序解包SOAP消息以获取客户端页面的结果和所需的处理过程。
首先,用户应用程序和Web服务中间件会创建一个SOAP消息并通过HTTP进行通信。SOAP是一种使用XML在应用程序之间发送消息的消息格式,它独立于技术、平台,并且是可扩展的。
在.NET中创建Web服务通常涉及以下步骤:
public DataSet GetSampleDataDT()
{
string conStr = WebConfigurationManager.ConnectionStrings["CONN"].ConnectionString;
DataTable dt = new DataTable();
SqlDataReader dr = null;
using (SqlConnection conn = new SqlConnection(conStr))
{
string sql = string.Format("select id,name,value1 from Table_1");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
conn.Open();
dr = cmd.ExecuteReader();
dt.Load(dr);
conn.Close();
cmd = null;
}
DataSet dsReturn = new DataSet();
dsReturn.Tables.Add(dt);
return dsReturn;
}
以上方法使用普通查询从数据库中获取数据。同时,创建一个方法将数据插入数据库。
在ASP.NET代码后台中,创建一个方法通过Web服务插入和获取数据,并将其存储在DataGridView中。
protected void btnSave_Click(object sender, EventArgs e)
{
WebService1 objWebService = new WebService1();
DataSet dtData = new DataSet();
objWebService.WB_HR_InsertMethod(Convert.ToInt32(txtId.Text.ToString()),
txtName.Text.ToString(), Convert.ToInt32(txtSalary.Text.ToString()));
dtData = objWebService.GetSampleDataDT();
dgv_show.DataSource = dtData;
dgv_show.DataBind();
}
输出结果将类似于这样:
在桌面应用程序中添加Web服务的步骤如下:
protected void btnSave_Click(object sender, EventArgs e)
{
WebService1 objWebService = new WebService1();
DataSet dtData = new DataSet();
objWebService.WB_HR_InsertMethod(Convert.ToInt32(txtId.Text.ToString()),
txtName.Text.ToString(), Convert.ToInt32(txtSalary.Text.ToString()));
dtData = objWebService.GetSampleDataDT();
dgv_show.DataSource = dtData;
dgv_show.DataBind();
}
同时,创建一个Show方法从Web服务中获取数据:
private void Show()
{
WebService1SoapClient objWebService = new WebService1SoapClient();
DataSet dsReturn = new DataSet();
dsReturn = objWebService.GetSampleDataDT();
DataTable dt = new DataTable();
dt=dsReturn.Tables[0];
dataGridView1.DataSource = dt;
}