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

ASP.NET 中的 Web 服务基础知识

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (96投票s)

2012年2月28日

CPOL

5分钟阅读

viewsIcon

612019

downloadIcon

10172

了解 Web 服务的必要性、拥有 Web 服务的优势以及如何创建和使用基本 Web 服务。

引言

本文旨在了解 Web 服务的必要性、拥有 Web 服务的优势以及如何创建和使用基本 Web 服务。

背景

应用程序之间的连接非常重要。无论如何,连接对于应用程序之间尤其重要。在 SOAP(简单对象访问协议)等技术出现之前,连接 Web 应用程序曾是一项巨大的挑战。之所以如此困难,是因为人们在许多不同的技术上工作。应用程序托管在不同类型的服务器上等等。但这些都不应成为促进应用程序之间通信的障碍。唯一的要求是遵循一些标准和标准的做事方式,以便应用程序能够与其他应用程序通信,而不管所使用的技术如何。

SOAP 和 Web 服务

SOAP 和 XML 解决了开发人员之前面临的问题。SOAP 是一种基于 XML 的标准协议,通过 HTTP 进行通信。我们可以将 SOAP 视为一种消息格式,用于通过 XML 在应用程序之间发送消息。它独立于技术、平台,并且可以扩展。

我们有 SOAP 和 XML 来实现应用程序之间的连接。这是否意味着我必须自己编写 XML 和 SOAP 特定的内容来实现这些通信?我可以这样做,但这将非常耗时,有时还会出错。

Web 服务在图片中在哪里出现?嗯,Web 服务是 ASP.NET 框架提供的一种机制,可以方便我们编写代码以促进应用程序之间的连接。作为一名 ASP.NET 开发人员,如果我需要一个应用程序供许多其他应用程序使用,那么我就可以决定为它编写一个 Web 服务,而 ASP.NET 框架将为我们处理底层的 SOAP 和 XML 工作。

另一方面是,如果我们的 ASP.NET 应用程序想要使用 Web 服务,即一个为我们提供基于 SOAP 的通信接口的应用程序。所以我们现在要做的是编写一个小的 Web 服务,看看我们如何让我们的应用程序准备好与其他应用程序通信,其次,我们将尝试使用 Web 服务来了解我们如何从我们的应用程序中使用其他应用程序。

Web service article image

创建 Web 服务

让我们编写一个简单的模块,它将为其他应用程序提供基本的算术运算。我们的应用程序用户需要向我们提供 2 个数字,我们将执行请求的操作,例如加法、减法和乘法。

因此,我们需要做的第一件事是创建我们的 Web 服务。我们可以通过创建 ASP.NET Web 服务类型的网站来做到这一点。这将为我们提供一个编写 Web 服务代码的框架。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service () {

        //Uncomment the following line if using designed components
        //InitializeComponent();
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
}

WebService 属性表示该类包含 Web 服务代码。命名空间用于标识 Web 服务。WebMethod 属性指定了我们的 Web 服务提供的所有方法。

现在,让我们继续编写代码,将我们的函数放入这个 Web 服务中。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service ()
    {
        //Uncomment the following line if using designed components
        //InitializeComponent();
    }

    [WebMethod]
    public int Add(int x, int y)
    {
        return x+y;
    }

    [WebMethod]
    public int Subtract(int x, int y)
    {
        return x - y;
    }

    [WebMethod]
    public int Multiply(int x, int y)
    {
        return x * y;
    }
}

我们已经实现了一个非常基本的 Web 服务,它可以让用户执行一些基本的算术运算。现在要创建 WebService 二进制文件,我们必须在 Visual Studio 命令提示符下使用以下命令。

>CSC /t:library /out:ArithmeticServiceImpl.dll App_code\Service.cs

这将为我们的 Web 服务创建一个 DLL 文件。任何客户端都可以通过 SOAP 协议使用此 DLL 文件。如果我们想测试我们的 Web 服务在 SOAP 协议上的工作方式,我们可以在浏览器中查看 service.asmx 文件,看看我们的 Web 服务公开了哪些函数。

Web service article image

我们甚至可以在此处测试这些方法,并查看包含服务描述的 XML 文件。

使用 WebService

我们可以通过三种方式使用 WebService

  1. 使用 HTTP-POST 方法。
  2. 使用 XMLHttp ,它将使用 SOAP 调用我们的服务
  3. 使用 WSDL 生成的代理类

可以通过直接从客户端调用 .asmx 文件来使用 HTTP-Post 方法。我们可以直接使用方法名称,参数名称将从表单中的输入字段中获取。

<html>
    <body>
        <form action="https:///.../Service.asmx/Multiply"  method="POST">
                <input name="x"></input>
                <input name="y"></input>

                <input type="submit" value="Enter"> </input>
        </form>
    </body>
</html>

提交此表单后,将调用 Web 服务的方法。第二种方法是我们可以在 SOAP 上使用 XMLHttp 来访问 Web 服务,当我们想使用 Web 服务的完整 SOAP 功能时使用。

使用 Web 服务的第三种方式是通过生成 Web 服务的 Proxy 类,然后使用该代理类。对我来说,这种方法更具类型安全性,并且不易出错,因为一旦我们生成了代理类,它就可以处理 SOAP 消息、序列化,并确保所有问题都可以在编译时而不是运行时处理。

要使用此服务,我们需要执行“添加 Web 引用”并添加 Web 服务引用。或者,我也可以使用命令行工具 WSDL.exe 来生成代理类并使用它们。“添加 Web 引用”也使用相同的 WSDL.exe 来生成代理类。

Web service article image

现在让我们编写一些代码来使用代理类执行操作,代理类将使用 SOAP 与 Web 服务通信,并将结果返回给我们。

protected void Button1_Click(object sender, EventArgs e)
{
    if (txtX.Text != string.Empty
        && txtY.Text != string.Empty)
    {
        try
        {
            int x = Convert.ToInt32(txtX.Text);
            int y = Convert.ToInt32(txtY.Text);

            ArithmeticService.Service service = new ArithmeticService.Service();

            Label1.Text = "Sum: " + service.Add(x, y).ToString();
            Label2.Text = "Difference: " + service.Subtract(x, y).ToString();
            Label3.Text = "Multiplication: " + service.Multiply(x, y).ToString();
        }
        catch(Exception)
        {
            throw;
        }
    }
}

让我们运行网站以查看结果

Web service article image

关注点

我们看到了如何在 ASP.NET 中创建 Web 服务以及如何在 ASP.NET 中使用 Web 服务。我们在这里没有看到一个有趣领域是如何使用 AJAX 调用 Web 服务的。ASP.NET 还提供了一种使用 scriptManager 的机制,它将生成 Web 服务的 JavaScript 代理,我们可以使用它来调用 Web 服务方法。此外,如果我们想自定义 Web 服务的安全性,我们也可以通过自定义 SOAP 头部来实现。

历史

  • 2012 年 2 月 27 日:ASP.NET 中的 Web 服务基础知识
© . All rights reserved.