65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (10投票s)

2012年11月20日

CPOL

4分钟阅读

viewsIcon

87365

downloadIcon

2894

用于 .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 服务都使用以下组件

  1. SOAP (简单对象访问协议)
  2. UDDI (通用描述、发现和集成)
  3. WSDL (Web 服务描述语言)

了解更多 SOAP, UDDI, WSDL.

为什么我们需要 Web 服务?

Web 服务受欢迎的主要原因是,通过 Web 服务,任何使用 PHP、C++、VB 或 C# 等制作的应用程序都必须遵守一组标准化的协议来共享和访问数据。这样,两个程序就可以相互通信,而不考虑操作系统、数据库或编程语言的兼容性。每个人都同意一组规则,通过这些规则进行这些交互。这个独特的功能被称为面向服务的架构 (SOA)。

Web 服务如何工作

  • 客户端程序将客户端页面信息捆绑到一个 SOAP 消息中。
  • 此 SOAP 消息作为 HTTP POST 请求的主体发送到 Web 服务。
  • Web 服务解压缩 SOAP 请求,并将其转换为应用程序可以理解的命令。应用程序根据需要处理信息,并使用新的唯一数据进行响应。
  • 接下来,Web 服务将响应打包到另一个 SOAP 消息中,该消息将其发送回客户端程序以响应其 HTTP 请求。
  • 客户端程序解压缩 SOAP 消息以获取客户端页面的结果和所需过程。

Web 服务有两种类型的用户

  1. 可重用的应用程序组件
  2. 连接现有软件

我如何在 .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。
© . All rights reserved.