• Web服务


      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 GETHTTP POST一样,SOAP也是运行于HTTP之上,但它绑定信息则是采用一个更详细的基于XML的语言来描述。

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

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

    Web服务交互

      WSDLSOAP标准使得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.DescriptionWeb服务的方法的描述信息、对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
  • 相关阅读:
    素数回文 ---- 有点暴力.....
    Manacher算法 , 实例 详解 . NYOJ 最长回文
    大数处理 详解 模版
    River Crossing 简单的动态规划 .
    hdu
    产生冠军 map 的 应用 .
    MySQL的数据库备份与恢复。
    rsync的相关使用,参数设置。
    centos与mac安装python虚拟环境 virtualenvwrapper
    CentOS7安装Python3.7
  • 原文地址:https://www.cnblogs.com/spilledlight/p/4898890.html
Copyright © 2020-2023  润新知