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






4.83/5 (96投票s)
了解 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 服务
让我们编写一个简单的模块,它将为其他应用程序提供基本的算术运算。我们的应用程序用户需要向我们提供 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 服务公开了哪些函数。
我们甚至可以在此处测试这些方法,并查看包含服务描述的 XML 文件。
使用 WebService
我们可以通过三种方式使用 WebService
- 使用 HTTP-POST 方法。
- 使用
XMLHttp
,它将使用 SOAP 调用我们的服务 - 使用 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 来生成代理类。

现在让我们编写一些代码来使用代理类执行操作,代理类将使用 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;
}
}
}
让我们运行网站以查看结果

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