文章教程

第12章WebService

8/31/2020 9:10:17 PM 人评论 次浏览

第12章 Web Service

本章视频教学录像:20 分钟

Web Service 是一种新的Web应用程序分支,是自包含、自描述和模块化的应用,可以发布、定位和通过Web调用。

Web服务的工作方式就像能够跨Web调用的组件。ASP.NET允许创建Web服务。在本章中,主要讲解如何创建Web服务以及如何使用Web服务作为Web应用程序中的组件。

本章要点(已掌握的在方框中打钩)

□ 了解Web Service

□ Web 服务代码隐藏文件

□ 使用 Visual Studio 2010 创建 Web Service

□ 调用 Web Service

12.1 Web Service简介

本节视频教学录像:4分钟

Web Service即Web服务。所谓服务就是系统提供一组接口,并通过接口使用系统提供的功能。与在Windows系统中的应用程序通过API接口函数使用系统提供的服务一样,在Web站点之间,如果使用其他站点的资源,就需要其他站点提供服务,这个服务就是Web服务。

Web服务是建立可互操作的分布式应用程序的新平台,它是一套标准,定义了应用程序如何在Web上实现互操作。在这个新的平台上,开发人员可以使用任何语言,以及在任何操作系统平台上进行编程,只要保证遵循Web服务标准,就能够实现对服务进行查询和访问。Web服务的服务器端和客户端都需要支持标准协议HTTP、SOAP和XML。

网络是多样性的,要在Web的多样性中取得成功,Web服务在涉及操作系统、对象模型和编程语言的选择时不能有任何倾向性。并且,要使Web服务像其他基于Web的技术一样被广泛采用,还必须满足以下特性。

⑴服务器端和客户端的系统都是松耦合的。也就是说,Web服务与服务器端和客户端所使用的操作系统和编程语言都无关。

⑵Web服务的服务器端和客户端应用程序具有连接到Internet的能力。

⑶用于进行通信的数据格式必须是开放式标准,而不是封闭通信方式。在采用自我描述的文本消息时,Web服务及客户端无需知道每个基础系统的构成即可共享消息,这使得自治系统和不同的系统之间能够进行通信。Web服务使用XML实现此功能。

Web Services 是指用于架构 Web service 的整体技术框架,而 Web Service 则是使用 Web Services技术而创建的应用实例。在很多时候,Web Services的含义也是具体的应用实例,只不过此时泛指。

在ASP.NET中创建一个Web服务与创建一个网页相似。但是Web服务没有用户界面,也没有可视化组件,并且Web服务仅包含方法。Web服务可以在一个扩展名为.asmx的文件中编写代码,也可以放在代码隐藏文件中。在Visual Studio 2010中,.asmx文件的隐藏文件创建在App_Code目录下。

Web服务文件中包括一个WebServices指令,该指令必须应用在所有Web服务中。语法代码如下:

<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service"%>

其中,

Language 属性:指定在 Web services 使用的语言。可以为 .NET 支持的任何语言,包括 C#、Visual Basic和JScript。该属性是可选的,如果未设置该属性,编译器将根据类文件使用的扩展名推导出所使用的语言。

Class属性:指定实现Web services的类名,该服务在更改后第一次访问Web services时被自动编译。该值可以是任何有效的类名。该属性指定的类既可以存储在单独的代码隐藏文件中,也可以存储在与Web Service指令相同的文件中。该属性是Web services必需的。

CodeBehind属性:指定Web services类的源文件的名称。

Debug属性:指示是否使用调试方式编译Web services。如果启用调试方式编译Web services, Debug属性则为true,否则为false。默认为false。在Visual Studio 2010中,Debug属性是由Web config文件中的一个输入值决定的,所以开发Web services时,该属性会被忽略。

12.2 Web Service服务代码隐藏文件

本节视频教学录像:7分钟

在代码隐藏文件中包含一个类,它是根据Web服务的文件名命名的。这个类有两个特性标签, Web Service和Web Service Binding。在该类中还有一个名为Hello World的模板方法,它将返回一个字符串。这个方法使用Web Method特性修饰,该特性表示方法对于Web服务使用程序可用。

1.Web Service特性

对于将要发布和执行的Web服务来说,Web Service特性是可选的。可以使用Web Service特性为Web服务指定不受公共语言运行库标识符规则限制的名称。

Web服务在成为公共之前,应该更改其默认的 XML 命名空间。每个 XML Web services 都需要唯一的XML命名空间来标识它,以便客户端应用程序能够将它与网络上的其他服务区分开来。http://tempuri.org/可用于正在开发中的Web服务,已发布的Web服务应该使用更具永久性的命名空间。例如,可以将公司的Internet域名作为XML命名空间的一部分。虽然很多Web服务的XML命名空间与URL很相似,但是,它们无需指向Web上的某一实际资源(Web服务的XML命名空间是URI)。对于使用ASP.NET创建的Web服务,可以使用Namespace属性更改默认的XML命名空间。

例如:将Web Service特性的XML命名空间设置为http://www.microsoft.com。代码如下:

using System;

using System.Web.Services;

[WebService(Namespace ="http:// www.microsoft. com /")]

public class Service : System.Web.Services.WebService

{

public Service () {

//如果使用设计的组件,请取消注释以下行

//InitializeComponent();

}

[WebMethod]

public string HelloWorld() {

return "Hello World";

}

}

2.Web Service Binding特性

按Web服务描述语言(WSDL)的定义,绑定类似于一个接口,原因是它定义一组具体的操作。每个Web services方法都是特定绑定中的一项操作。Web services方法是Web services默认绑定的成员,或者是在应用于实现Web services的类的Web Service Binding特性中指定绑定的成员。Web服务可以通过将多个Web Service Binding特性应用于Web services来实现多个绑定。

3.Web Method特性

Web services类包含一个或多个可在Web服务中公开的公共方法。这些Web services方法以Web Method特性开头。为使用ASP.NET创建的Web服务中的某个方法添加此Web Method特性后,就可以从远程Web客户端调用该方法。

Web Method特性包括一些属性,这些属性可以用于设置特定Web方法的行为,语法如下:

[Web Method(PropertyName=value)]

Web Method特性提供以下属性。

Buffer Response属性:Buffer Response属性启用对Web services方法响应的缓冲。当设置为true时,ASP.NET在将响应从服务器向客户端发送之前,对整个响应进行缓冲。当设置为false时,ASP. NET以16KB的块区缓冲响应。默认值为true。

Cache Duration属性:Cache Duration属性启用对Web services方法结果的缓存。ASP.NET将缓存每个唯一参数集的结果。该属性的值指定ASP.NET应该对结果进行多少秒的缓存处理。值为0时,则禁用对结果进行缓存。默认值为0。

Description属性:Description属性提供Web services方法的说明字符串。当在浏览器上测试Web服务时,该说明将显示在Web服务帮助页上。默认值为空字符串。

Enable Session属性:Enable Session属性设置为true,启用Web services方法的会话状态。一旦启用,Web services 就可以从 HttpContext.Current.Session中直接访问会话状态集合,如果它是从Web Service基类继承的,则可以使用Web Service.Session属性来访问会话状态集合。默认值为false。

Message Name属性:Web服务中禁止使用方法重载。但是,可以通过使用Message Name属性消除由多个相同名称的方法造成的无法识别问题。Message Name属性使Web服务能够唯一确定使用别名的重载方法。默认值是方法名称。当指定Message Name时,结果SOAP消息将反映该名称,而不是实际的方法名称。

12.3 使用Visual Studio 2010创建Web Service

本节视频教学录像:3分钟

下面通过一个简单的例子介绍如何使用Visual Studio 2010创建Web服务。

【范例12-1】创建简单的Web服务。

本示例将介绍如何创建一个简单的Web服务。程序实现的主要步骤如下。

⑴打开Visual Studio 2010开发环境,依次选择【文件】figure_0315_0558【新建】figure_0315_0559【asp.net空网站】命令,并将网站命名为WebDemo1,在解决方案资源管理器中右键单击项目名称,依次点击【添加新项】figure_0315_0560【Web服务】命令,这里直接使用默认的web服务文件名,默认名为WebService.asmx如下图所示。

figure_0315_0561

⑵单击“确定”按钮,将显示如图所示的页面。

figure_0316_0562

该页为Web服务的代码隐藏文件,它包含了自动生成的一个类,并生成一个名为Hello World的方法,返回一个字符串。

⑶在代码中添加自定义的方法,包括+、-、*、/四种运算,代码如下。

01 [WebMethod(Description=“求和的方法”)]

02 public double addition(double i,double j)

03 {

04  return i+ j;

05 }

06 [WebMethod(Description=“求差的方法”)]

07 public double subtract(double i,double j)

08 {

09  return i - j;

10 }

11 [WebMethod(Description=“求积的方法”)]

12 public double multiplication(double i,double j)

13 {

14  return i * j;

15 }

16 [WebMethod(Description=“求商的方法”)]

17 public double division(double i,double j)

18 {

19  if (j != 0)

20  return i / j;

21 else

22  return 0;

23 }

24 }

⑷按【F5】键调试运行,或单击工具栏中的figure_0317_0563按钮,即可在浏览器中显示如图所示的结果。

figure_0317_0564

⑸点击【Addition】并输入相应的数字,点击【调用】可得到XML格式的求和结果。

figure_0317_0565

关于-、*、/,读者可自行调用并尝试,此处不再赘述。

12.4 调用Web Service

本节视频教学录像:4分钟

上节内容只是简单地创建了Web service,创建完Web服务,并且对Internet上的使用者开放,发现哪些方法可用,还要创建客户端代理,并将代理合并到客户端中。这样,客户端就可以如同调用本地服务一样使用Web服务。实际上,客户端应用程序通过代理实现本地方法调用,就好像它通过Internet直接调用Web服务一样。

下面将演示如何创建一个Web应用程序来调用Web服务。该示例将调用例12-1中创建的Web服务。

【范例12-2】调用Web服务。

本实例将介绍如何使用已经存在的Web服务。执行程序,示例运行结果如图所示。

figure_0317_0566

程序实现的主要步骤如下。

⑴打开Visual Studio 2010开发环境,依次选择【文件】figure_0317_0567【新建】figure_0317_0568【asp.net空网站】命令,并将网站命名为WebDemo2。

⑵在解决方案资源管理器中右键单击网站名,单击【添加Web引用】,出现如图所示的界面。

figure_0318_0569

⑶单击【本地计算机上的Web服务】,出现如图所示的界面。

figure_0318_0570

⑷单击【WebService】,出现如图所示的界面。

figure_0318_0571

这里需要说明的是,本例主要实现调用本地计算机上的Web服务,所以单击【本地计算机上的Web服务】链接,将在【添加Web引用】对话框中显示在本地计算机上的可用的Web服务和发现文档,另外需要注意的是本程序的调用需要配置IIS,IIS配置不正确将直接导致本程序的失败,具体可参考本书1.2.1小节。

Web引用默认名为localhost,这里直接单击【添加引用】之后,解决方案资源管理器中出现如图所示的引用。

figure_0319_0572

⑸为WebDemo2添加一个Web窗体,使用默认名称Default.aspx。切换到页面的源视图,代码如下。

01 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>

02 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

03 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

04 <html xmlns="http://www.w3.org/1999/xhtml">

05 <head id="Head1" runat="server">

06 <title>无标题< /title>

07 < /head>

08 <body>

09 <form id="form1" runat="server">

10 <div>

11 <asp:TextBox ID="Num1" runat="server">< /asp:TextBox>

12  <select id="selectOper" runat= "server">

13  <option>+< /option>

14  <option>-< /option>

15  <option>*< /option>

16  <option> /< /option>

17 < /select>

18 <asp:TextBox ID="Num2" runat="server">< /asp:TextBox>

19 <asp:Button ID="Button1" runat="server" Text="=" onclick="Button1_Click" />

20 <asp:TextBox ID="Result" runat="server">< /asp:TextBox>

21 < /div>

22 < /form>

23 < /body>

24 < /html>

然后在后台写调用的代码,调用之前和使用其他的对象一样,要先实例化,实例化的方法是localhost.WebService a = new localhost.WebService();然后就可以通过a来访问WebService里面提供的方法了。在这个例子里面,动态地创建了一个button控件来触发WebService的调用,后台代码如下。

01 public partial class _Default :System.Web.UI.Page

02 {

03 protected void Page_Load(object sender,EventArgs e)

04 {

05 }

06 protected void Button1_Click(object sender,EventArgs e)

07 {

08  string selectFlag= selectOper.Value;

09    localhost.WebService web= new localhost.WebService();

10    if (selectFlag.Equals("+"))

11  {

12  Result.Text = (web.addition(double.Parse(Num1.Text), doub13 le.Parse(Num2.Text))).ToString();

14  }

15  else if (selectFlag.Equals("-"))

16  {

17  Result.Text = (web.subtract(double.Parse(Num1.Text), doub18le.Parse(Num2.Text))).ToString();

19  }

20  else if (selectFlag.Equals("*"))

21  {

22 Result.Text=(web.multiplication(double.Parse(Num1.Text),double.Parse(Num2.Text))).ToString();

23  }

24 else if (selectFlag.Equals("/"))

25  {

26 Result.Text= (web.division(double.Parse(Num1.Text),double.Parse(Num2.Text))).ToString();

27  }

28 }

29 }

【运行结果】

按【F5】键运行,输入相应的数值,选择相应的运算,单击figure_0320_0573按钮即可得到运算结果,如图所示。

figure_0320_0574

12.5 高手点拨

本节视频教学录像:2分钟

WinForm调用Web Services

我们创建的Web服务,不但在Web项目中可以调用,对于WinForm应用程序也可以调用,调用的基本方法为:添加服务引用figure_0321_0575高级figure_0321_0576添加Web引用figure_0321_0577填写urlfigure_0321_0578添加Web引用。具体视项目情况而定。

12.6 实战练习

创建一个简单的Web服务,要求输入一个字符串,返回反向字符串,并创建Web客户端程序调用此功能。

教程类别