zoukankan      html  css  js  c++  java
  • Web Service

    去年新入职时,接触过一点 WCF,也知道 Web Service 的存在,目前刚好在做一个 Web Service 相关的东西,借此机会,学习一下 Web Service。

    概念初识

    首先就要了解什么是 Web Service,Web Service 能用来做什么?具体信息可参见:Web Service 入门

    目前 Web Service 并没有明确的定义,推荐维基百科

    Web Service 是一种面向服务的架构技术,通过标准的 Web 协议提供服务,保证不同平台(不同语言)间的应用服务可以互操作

    • 提供服务接口
    • 数据交换

    作为面向服务架构的一种实现方式,以一种平台无关的方式在不同系统之间进行交互,

    (XML) Web Service,既不是框架、也不是技术,严格来说是行业规范,通过 Internet 基于 SOAP 协议 在 Web 上提供软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册以供用户查找使用。Web Service 是构造分布式、模块化应用程序和面向服务应用集成的技术,利用网络进行应用集成的解决方案。Web Service 使用开放的 XML 文档来描述、发布、配置、开发分布式互操作的应用程序。

    SOAP + WSDL + UDDI 是一个 Web Service 必不可少的部分,解释如下:

    • SOAP:Simple Object Access Protocol,简易对象访问协议,一个基于 XML 的可扩展消息信封格式,Web Service 的通信协议
    • WSDL:Web Services Description Language,Web Service 使用说明, 一个 XML 格式文档,用以描述服务端口访问方式和使用协议的细节,指导如何调用 Web Service
    • UDDI:Universal Description, Discovery, and Integration,一个用来发布和搜索 Web 服务的协议,应用程序可借由此协议在设计或运行时找到目标 Web Service

    服务提供方定义由 WSDL 描述的接口,并使用 SOAP 消息与服务使用方进行消息交互。

    SOAP协议 = HTTP协议 + XML数据格式

    Web Service 采用 HTTP 协议传输数据,采用 XML 格式封装数据,SOAP协议基于HTTP协议。

    优点

    • 平台独立、低耦合、自包含,基于可编程的Web应用程序
    • 支持分布式部署
    • 单向通信的方式(单工)、请求响应的方式(半双工)
    • 应用程序之间只能以基于HTTP无状态的方式进行通信,寄宿于web服务器

    基础使用

    对 Web Service 的使用,包括如下三种方式

    [1]. 远端过程调用:传统方式,RPC,提供一个分布式函数或方法接口供用户调用

    [2]. 面向服务架构:SOA,连接服务 + 调用服务提供的方法

    [3]. REST式服务:表达性状态转移,类似于HTTP协议,通过 Web Service 或 WCF 向外提供 REST 的 Service(restful 接口)

    关于使用 JSON 和 XML 的问题

    JSON 和 XML 两者都是 Web Service 的资源表示方式,用于发送请求和返回结果。

    • JSON:轻量级的数据交换格式,良好的可读性和兼容性、编写快捷
    • XML:扩展标记语言,非常适合 Web 传输

    两者的优缺点

    • 可读性、可扩展性等同
    • 数据大小:JSON 要优于 XML,但是差别不大
    • 性能测试:JSON 的解析速度几乎是 XML 解析的10倍
    • 使用范围:XML 目前被业界广泛采用,而 JavaScript 语言对 JSON 支持要比 XML 优越

    对于 Web Service 和 Rest Service,可参见:关于Web Service和Rest Service理解

    [1]. 提供服务

    简单起见,新建一个服务 SqhWebService,提供一个两数相加的方法,基本步骤如下

    (1)新建项目 ASP.NET 空 Web 应用程序,命名为 SqhWebService,然后添加 Web 服务,命名为 SqhWebService.asmx,结果为

     

    (2)在服务文件 SqhWebService.asmx 中,添加两数相加的方法

    namespace SqhWebService
    {
        /// <summary>
        /// SqhWebService 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
        // [System.Web.Script.Services.ScriptService]
        public class SqhWebService : System.Web.Services.WebService
        {
            [WebMethod]
            public int AddTwoInteger(int a, int b) {
                return a + b;
            }
        }
    }
    

    (3)右键 SqhWebService.asmx,点击 在浏览器中查看,服务启动成功

     

    同时,记录下服务的 URL 地址:http://localhost:20378/SqhWebService.asmx,备用。

    [2]. 调用服务

    对于服务调用,此处提供 2 种方法:

    (1)直接点击上图中的 AddTwoInteger 方法,即可调用服务方法进行测试

     

    然后,a = 1, b = 2, 点击调用,会得到如下结果

    <?xml version="1.0" encoding="UTF-8"?>
    <int xmlns="http://tempuri.org/">3</int>
    

    之后,解析该 xml 信息即可。

    (2)新建一个 ASP.NET 程序或者控制台程序,关键是 添加服务引用

     

    在弹出的界面中,添加刚刚记下来的 URL 地址,点击前往确认即可,下方的命名空间可以为 SqhServiceReference 

    下图给出引用添加后,项目方案资源的结构图

    下面直接给出主程序中的调用代码

    namespace TestWebService
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                SqhServiceReference.SqhWebServiceSoapClient client =
                    new SqhServiceReference.SqhWebServiceSoapClient();
    
                int result = client.AddTwoInteger(1, 2);
            }
        }
    }
    

    问题解决

    [1]. 如何实现浏览器对WebService的远程调用?

    以上创建的在浏览器调用的web服务仅供本地计算机调试使用,需要配置 web.config 才能实现远程调用调试

    <system.web>  
        <webServices>  
          <protocols>  
            <add name="HttpGet"/>  
            <add name="HttpPost"/>  
          </protocols>  
        </webServices>    
    <system.web>
    

    如不配置,远程调用会出现:测试窗体只能用于来自本地计算机的请求解决 的问题。

    [2]. 无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。

    原因:在 web.config 文件中多次引用了“添加外部引用”

    解决方法:删除多余的 basicHttpBinding 绑定节点和 endpoint 终点节点,保持唯一性

    项目配置文件 web.config 应该是如下形式:

  • 相关阅读:
    个人觉得在前台比较通用的校验的提示方法
    平时面试总结
    sturts2批量导入excel中的信息入库大致代码
    在B/S系统中得到spring的ApplicationContext对象的一点小技巧
    Oracle同义词创建及其作用
    Oracle中创建dblink的方法
    真实项目中struts2 导出excel文件
    十二款jQuery插件(编辑器,图片,验证等)
    华丽到暴表的网站 cnn ecosphere
    Mysql 临时表
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/6933473.html
Copyright © 2011-2022 走看看