用于 .NET Web 和桌面应用程序的单一 Web 服务 (基本概念)






4.74/5 (10投票s)
用于 .NET Web 和桌面应用程序的单一 Web 服务。
背景
有时我们希望为应用程序的 Web 和桌面版本使用单个数据库。在这种情况下,我们需要在 Web 版本和桌面版本中使用相同的任务、相同的接口、类和方法。在这些情况下,我们可能需要在 Web 和桌面中使用相同的方法。
同样,有时我们需要部分在 Web 上工作,部分在桌面上工作。在这种情况下,我们可能需要在 Web 和桌面中使用相同的方法。
例如:一个用于食品行业的应用程序,更确切地说是一个用于管理送货、外卖、餐桌预订、POS、应付账款和应收账款、打印(收据)、厨房监控订单、客户订单控制和财务区域的软件。在这种情况下,客户通常会要求类似这样的东西
1 - Web 区域(基本上执行以下操作)
- 显示带有产品的目录
- 客户下订单
- 客户支付订单费用
- 等等... 如上所述
2 - 桌面区域
- 管理订单
- 管理客户
- 管理供应商
- 管理应付账款和应收账款
- 等等... 如上所述
在上述 Web 和桌面部分,我们可能需要在 Web 和桌面中使用相同的方法。在这种情况下,我们可以使用 Web 服务使其更具可重用性。但是 Web 服务有不同的任务。首先,我在这里讨论 Web 服务。
- 什么是 Web 服务?
- Web 服务的组成部分是什么?
- 为什么我们需要 Web 服务?
- 它是如何工作的?
- Web 服务如何在 .net Web 应用程序和桌面应用程序中工作?
什么是 Web 服务?
Web 服务是一种技术框架,它允许通过网络进行机器对机器 (M2M) 交互。它可以调用应用程序组件。该协议使用 XML 进行通信。它不绑定到任何一个操作系统或编程语言。
Web 服务的组成部分
基本的 Web 服务平台是 XML + HTTP。所有标准的 Web 服务都使用以下组件
- SOAP (简单对象访问协议)
- UDDI (通用描述、发现和集成)
- WSDL (Web 服务描述语言)
为什么我们需要 Web 服务?
Web 服务受欢迎的主要原因是,通过 Web 服务,任何使用 PHP、C++、VB 或 C# 等制作的应用程序都必须遵守一组标准化的协议来共享和访问数据。这样,两个程序就可以相互通信,而不考虑操作系统、数据库或编程语言的兼容性。每个人都同意一组规则,通过这些规则进行这些交互。这个独特的功能被称为面向服务的架构 (SOA)。
Web 服务如何工作
- 客户端程序将客户端页面信息捆绑到一个 SOAP 消息中。
- 此 SOAP 消息作为 HTTP POST 请求的主体发送到 Web 服务。
- Web 服务解压缩 SOAP 请求,并将其转换为应用程序可以理解的命令。应用程序根据需要处理信息,并使用新的唯一数据进行响应。
- 接下来,Web 服务将响应打包到另一个 SOAP 消息中,该消息将其发送回客户端程序以响应其 HTTP 请求。
- 客户端程序解压缩 SOAP 消息以获取客户端页面的结果和所需过程。
Web 服务有两种类型的用户
- 可重用的应用程序组件
- 连接现有软件
我如何在 .NET Web 应用程序和桌面应用程序中使用 Web 服务
首先,用户应用程序和 Web 服务中间件创建一个 SOAP 消息并通过 HTTP 进行通信。我们可以说 SOAP 是一种用于使用 XML 在应用程序之间发送消息的消息格式。它与技术、平台无关,并且也是可扩展的。
关于代码
数据库:使用密码 sqladmin 创建一个名为 TESTDB 的数据库,然后在 sa 模式下运行给定的脚本。在解决方案中创建两个项目,一个用于 Web,另一个用于桌面。
创建 Web 服务:创建从数据库获取数据的方法。
[WebMethod]
public DataSet GetSampleDataDT()
{
// getting connection string
string conStr = WebConfigurationManager.ConnectionStrings["CONN"].ConnectionString;
DataTable dt = new DataTable();
SqlDataReader dr = null;
using (SqlConnection conn = new SqlConnection(conStr))
{
// Creating insert statement
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;
}
在上述方法中,我只是使用一个普通的查询来从数据库获取数据。再次创建一种用于在数据库中插入数据的方法。
[WebMethod]
public void WB_HR_InsertMethod(int id, string name, int salary)
{
// getting connection string
string conStr = WebConfigurationManager.ConnectionStrings["CONN"].ConnectionString;
int rowsInserted = 0;
// Creating Sql Connection
using (SqlConnection conn = new SqlConnection(conStr))
{
// Creating insert statement
string sql = string.Format(@"INSERT INTO [TESTDB].[dbo].[Table_1]([id]," +
@"[name],[value1])VALUES('"+id+"','"+name+"','"+salary+"')");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
conn.Open();
rowsInserted = cmd.ExecuteNonQuery();
conn.Close();
cmd = null;
}
}
在 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 服务
转到引用 > 添加服务引用。
现在添加一个确定按钮。将包含 Web 服务器。
添加一个新表单。在 form1
的代码隐藏中添加一个新方法。
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;
}
相同的输出将显示在桌面应用程序中
相同的数据库用于 Web 和桌面应用程序。
历史
- 2012 年 11 月 20 日:版本 1。