Web服务

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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中的代码,如下:

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Data;4usingSystem.Data.SqlClient;5usingSystem.Linq;6usingSystem.Web;7usingSystem.Web.Services;89namespaceWebapplication110{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.NETAjax从脚本中调用此 Web 服务,请取消注释以下行。18//[System.Web.Script.Services.ScriptService]19publicclassWebService1 : System.Web.Services.WebService20{2122[WebMethod(Description="获取学生信息")]23publicDataSet GetStudent(stringname)24{25if(name =="")26returnnull;27DataSet dataSet =newDataSet("Student");28stringconnString ="Data Source=追风的蜗牛;Initial Catalog=Student;Integrated Security=True";29stringsql ="select * from Student where stuName='"+ name +"'";30SqlConnection sqlConnection =newSqlConnection(connString);31try32{33SqlDataAdapter sqlDataAdapter =newSqlDataAdapter(sql, sqlConnection);34sqlConnection.Open();35sqlDataAdapter.Fill(dataSet);36returndataSet;37}38catch39{40sqlConnection.Close();41returnnull;42}43}44}45}

View Code

使用存在的Web服务

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

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

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Data;4usingSystem.Linq;5usingSystem.Web;6usingSystem.Web.UI;7usingSystem.Web.UI.WebControls;89namespaceWebApplication110{11publicpartialclassDefault : System.Web.UI.Page12{13protectedvoidPage_Load(objectsender, EventArgs e)14{15WebService1 server1 =newWebService1();16DataSet dataSet = server1.GetStudent("吴彤");17if(dataSet !=null)18{19this.DetailsView1.DataSource = dataSet.Tables[0].DefaultView;20this.DetailsView1.DataBind();21}22}23}24}

View Code

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航