·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Web服务

Web服务

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

  Web服务(Web Services),其实就是一种无须购买并部署的组件,是一种被一次部署到Internet中然后到处可用的一种新型组件,所有应用只需要能够连入Internet,就可以使用和集成Web服务。

  Web服务基于一套描述软件通信语法和语义的核心标准。xml提供表示数据的通用语法;简单对象访问协议(SOAP)提供数据交换的语义;Web服务描述语言(WSDL)提供描述Web服务功能的机制。其他规范统称为WS-*体系结构,用于定义Web服务发现、事件、附件、安全性、可靠的消息传送、事务和管理方面的功能。

  Web服务提供了定义良好的接口,这些接口描述了它所提供的服务,用户可以通过这些接口来调用Web服务提供的功能。开发者可以通过把远程服务、本地服务和用户代码结合在一起来创建应用程序。

  Web服务既可以在内部由单个应用程序使用,也可通过Internet公开供任意数量的应用程序使用。由于可以通过标准接口访问,因此Web服务使异构系统能够作为一个计算网络协同运行。

  Web服务正在开创一个分布式应用程序开发的新时代。作为Internet的下一个革命性的进步,Web服务将成为把所有计算设备链接到一起的基本结构。

  Web服务的设计是基于兼容性很强的开放式标准。为了确保最大限度的兼容性和可扩展性,Web服务体系被建设得尽可能通用。

Web服务的标准如下:

  1.WSDL:告诉客户端一个Web服务中都提供了什么方法,这些方法包含什么参数、将要返回什么值以及如何与这些方法进行交互。

  2.SOAP:在信息发送到一个Web服务之前,提供对信息进行编码的标准。

  3.HTTP:所有的Web服务交互发生时所遵循的协议。

  4.DISCO:该标准提供包含对Web服务的链接或以一种特殊的途径来提供Web服务的列表。

  5.UDDI:这个标准提供创建业务的信息。

SOAP

  在.NET中,客户端在与Web服务交互时有下面三种协议能够使用:

    1.HTTP GET:使用该协议与Web服务交互时,会把客户端发送的信息编码后放在查询字符串里,而客户端获取的Web服务的信息则是以一个基本的XML文档的形式存在。

    2.HTTP POST:使用该协议与Web服务交互时,会把参数放在请求体里面,而获取的信息则是以一个基本的XML文档的形式存在。

    3.SOAP:使用该协议与Web服务交互时,请求和获取的信息都是以XML形式存在。同HTTP GET和HTTP POST一样,SOAP也是运行于HTTP之上,但它绑定信息则是采用一个更详细的基于XML的语言来描述。

  尽管.NET有能力支持以上三种协议,但是为了安全,通常会限制使用前两种协议。默认情况下,.NET禁用HTTP GET,而且对于本地计算机限制HTTP POST。这意味着程序员可以使用前两种协议测试Web服务,但不能使用它们来访问一个远程计算机上的Web服务。可以在Web.Config文件里改变这些设置,但.NET不推荐这样做。

  从本质上来说,当使用SOAP时,程序员只需要简单的使用SOAP标准来编码信息即可。

与Web服务交互

  WSDL和SOAP标准使得Web服务同客户端的交互成为可能,但它们没有说明如何进行交互。以下三个组件在Web服务同客户端的交互中扮演重要角色:

    1.一个定制的Web服务类,该类提供一些功能。

    2.一个客户端应用程序,该程序使用上面组件的功能。

    3.一个代理类,该类扮演上面两个组件间的接口角色。该代理类包含所有Web服务方法的说明,而且根据选择的协议处理所有与Web服务交互相关的细节问题。

  实际交互过程的执行步骤:

    1.客户端创建一个代理类的实例。

    2.客户端调用代理类的方法。

    3.在后台,代理类以恰当的形式发送信息到Web服务,并且接收相应的反应信息。

    4.代理类返回调用代码的结果。

  在使用交互过程中需要注意以下内容:

    1.并不是所有的数据类型都支持方法参数和返回值。如大部分.NE类对象都不能在该交互过程中被传递(DataSet除外)。

    2.网络调用花费很少的但可计量的时间。如果需要在一行代码中使用几个Web服务方法,则这个延迟会被累加的。

    3.除非Web服务采用特殊步骤来记忆状态,状态数据会被丢失的。这意味着程序员应该把Web服务看成是一个无状态的实用类,而该类包含很多程序员需要使用的方法。

    4.在与Web服务的交互中,会出现错误且可能被中断。程序员在构建一个健壮的应用程序时要考虑到很多因素。

创建Web服务

  创建Web服务的步骤:

    1. 右键点击网站名称。在弹出的快捷菜单中选择“添加新项”命令。

    2. 在弹出的“添加新项”选择“已安装模板”下的“Visual C#”模板,并在模板文件列表中选中“Web 服务”,然后在“名称”文本框输入该文件的名称“WebService.asmx”,单击“添加”按钮。

    3. 在解决方案资源管理器中出现Web服务的文件。

  在asp.net中,所有的Web服务类都会继承于System.Web.WebService类。该类包含一个构造函数,一般情况下可以不需要改构造函数。

  WebMethod用来提供描述它所标识的方法的接口,WebMethod的属性如下:

    1.Description:Web服务的方法的描述信息、对Web服务的方法的功能注释。

    2.Enablesession:指示Web服务是否启动Session标志,主要通过Cookie完成,默认为false。

    3.MessageName:主要实现方法重载后的重命名。

    4.TransactionOption:指示XML Web services方法的事务支持。

    5.CacheDuration:指定缓存时间的属性。

    6.BufferResponse:配置Web服务的方法是否等到响应被完全缓冲后,才发送信息给请求端。

  创建Web服务中的方法

    利用上述步骤创建Web服务WebService1.asmx,修改WebService1.asmx.cs中的代码,如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.Data.SqlClient;
 5 using System.Linq;
 6 using System.Web;
 7 using System.Web.Services;
 8 
 9 namespace Webapplication1
10 {
11     /// <summary>
12     /// WebService1 的摘要说明
13     /// </summary>
14     [WebService(Namespace = "http://tempuri.org/")]
15     [WebServiceBinding(ConformsTo = WsiPRofiles.BasicProfile1_1)]
16     [System.ComponentModel.ToolboxItem(false)]
17     // 若要允许使用 ASP.NET Ajax 从脚本中调用此 Web 服务,请取消注释以下行。 
18     // [System.Web.Script.Services.ScriptService]
19     public class WebService1 : System.Web.Services.WebService
20     {
21 
22         [WebMethod(Description="获取学生信息")]
23         public DataSet GetStudent(string name)
24         {
25             if (name == "")
26                 return null;
27             DataSet dataSet = new DataSet("Student");
28             string connString = "Data Source=追风的蜗牛;Initial Catalog=Student;Integrated Security=True";
29             string sql = "select * from Student where stuName='" + name + "'";
30             SqlConnection sqlConnection = new SqlConnection(connString);
31             try
32             {
33                 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, sqlConnection);
34                 sqlConnection.Open();
35                 sqlDataAdapter.Fill(dataSet);
36                 return dataSet;
37             }
38             catch
39             {
40                 sqlConnection.Close();
41                 return null;
42             }
43         }
44     }
45 }
View Code

  使用存在的Web服务

    右键单击项目名称,为项目添加服务引用,选择此解决方案中的Web服务,选择刚刚创建的Web服务。

    添加页面Default.aspx,添加一个DetailsView控件,Default.aspx.cs中的代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.Linq;
 5 using System.Web;
 6 using System.Web.UI;
 7 using System.Web.UI.WebControls;
 8 
 9 namespace WebApplication1
10 {
11     public partial class Default : System.Web.UI.Page
12     {
13         protected void Page_Load(object sender, EventArgs e)
14         {
15             WebService1 server1 = new WebService1();
16             DataSet dataSet = server1.GetStudent("吴彤");
17             if (dataSet != null)
18             {
19                 this.DetailsView1.DataSource = dataSet.Tables[0].DefaultView;
20                 this.DetailsView1.DataBind();
21             }
22         }
23     }
24 }
View Code