1. 客户端创建WEB服务代理类的一个新实例,该对象驻留在客户端所在的同一台计算机上.
  2. 客户端调用代理类上的方法.
  3. 客户端计算机上的ASP.NET框架的基础结构将WEB服务方法的参数序列化为SOAP消息,并通过网络将它发送给WEB服务.
  4. ASP.NET框架基础结构结收SOAP消息并反序列化该XML.他创建了WEB服务类的实例并调用WEB服务方法,同时将返序列化的XML作为参数传入.
  5. WEB服务方法执行其代码,最终会设置返回值和任何输出参数.
  6. WEB服务器上的ASP.NET框架基础结构将返回值和输出参数序列化为SOAP消息,并通过网络发送回客户端.
  7. 客户端计算机上的ASP.NET框架基础结构接收该SOAP消息,将XML反序列化为返回值和任何输出参数.并将它们传给代理类的实例.
  8. 客户端接收返回值和任何输出参数.

SOAP扩展可能检查或修改SOAP的阶段

  • AfterDeserialize:    发生在将SOAP消息反序列化到对象之后的阶段.
  • AfterSerialize:        发生在序列化之后,但在通过网络发送SOAP消息之前.
  • BeforeDeserialize:  发生在反序列批这前,但在网络发送之后.
  • BeforeSeralize:       发生在序列化之前.

SOAP扩展的步骤:

  1. SoapExtension派生一个类.
  2. 保存对表示将来SOAP消息的Stream的引用.
  3. 初始化SOAP扩展.
  4. 在相关的SoapMessageStage或多个阶段中处理SOAP消息.
  5. 配置SOAP扩展使其可用.

注:SoapExtension派生类重要的重载方法

  • ChainStream:    当在派生类中被重载时,允许SOAP扩展访问包含SOAP请求或响应的内存缓冲区
  • GetInitializer:    当在派生类中被重载时,允许SOAP扩展以一次执行的成本初始化特定的WEB服务方法的数据
  • Initialize:            当在派生类中被重载时,允许SOAP扩展使用缓存于GetInitializer方法中的数据初始化其自身.
  • ProcessMessage:当在派生类中被重载时,允许SOAP扩展接收要在每个SoapMessageStage中处理的SoapMessage.

//处理SOAP消息
//每当切换到一种新的阶段时,该方法都会被调用
public override void ProcessMessage(SoapMessage message)
{
    switch(message.Stage)
    {
            case SoapMessageStage.BeforeSerialize:
                break;
            case SoapMessageStage.AfterSerialize:
                WriteOutput(message);
                break;
            case SoapMessageStage.BeforeDeserialize:
                WriterInput(message);
                break;
            case SoapMessageStage.AfterDeserialize:
                break;
            default:
                throw new Exception(“Invalid stage“);
    }
}:

调用SOAP扩展方法的顺序:

客户端:
    1. 客户端对代理类调用方法.
    2. 在客户端创建SOAP扩展新实例.
    3. 如果是第一次在客户端调用该WEB服务执行该SOAP扩展,则对运行于客户端的SOAP扩展调用GetInitilalizer方法.
    4. 调用Initialize方法.
    5. 调用ChainStream方法.
    6. 调用ProcessMessage方法.调用时将SoapMessageStage设置为BeforeSerialize.
    7. 客户端计算机上的ASP.NET将WEB服务方法的参数序列化为XML.
    8. 调用ProcessMessage方法.调用时将SoapMessageStage设置为AfterSerialize.
    9. 客户端计算机上的ASP.NET通过网络将SOAP消息发送到承载该WEB服务的WEB服务器.
服务器端:
    1. WEB服务器上的ASP.NET接收该SOAP消息.
    2. 在WEB服务器上创建SOAP扩展的新实例.
    3. 在WEB服务器上,如果这是第一次在服务器端使用该WEB服务执行该SOAP扩展,则对运行于服务器端的SOAP扩展调用GetInitializer方法.
    4. 调用Initialize方法.
    5. 调用ChainStream方法.
    6. 调用ProcessMessage方法.调用时将SoapMessageStage设置为BeforeDeserialize.
    7. ASP.NET反序列化XML中的参数.
    8.调用ProcessMessage方法.调用时将SoapMessageStage设置为AfterDeserialize.
    9. ASP.NET创建实现WEB服务的类的新实例并调用WEB服务的方法.同时传入反序列化的参数.该对象驻留在与WEB服务器相同的计算机上.
    10.WEB服务执行其代码.最终会设置返回值和任何输出参数.
    11. 调用ProcessMessage方法.调用时将SoapMessageStage设置为BeforeSerialize.
    12. WEB服务器上的ASP.NET将返回值与输出参数序列化为XML.
    13. 调用ProcessMessage方法.调用时将SoapMessageStage设置为AfterSerialize.
    14. ASP.NET通过网络将SOAP响应消息发送回WEB服务客户端.
客户端:
    1. 从服务器接收SOAP消息.
    2. 调用ProcessMessage方法.调用时将SoapMessageStage设置为BeforeDeserialize.
    3. ASP.NET将XML反序列化为返回值与输出参数.
    4. 调用ProcessMessage方法.调用时将SoapMessageStage设置为AfterDeserialize.
    5. ASP.NET将返回值与任何输出参数传递到代理类的实例.
    6. 客户端接收返回值与任何输出参数.

转载于:https://www.cnblogs.com/sw22225458/archive/2007/10/27/939394.html

Web服务生存周期内发生的事件/Soap扩展的阶段/Soap扩展的步骤相关推荐

  1. Web 服务寻址(WS-Addressing)对 SOAP 的隐式影响

    文档选项 <tr valign="top"><td width="8"><img alt="" height= ...

  2. [转载]SUN ONE 开发 WEB 服务

    SUN ONE 开发 WEB 服务 实施摘要 本文对在北美的一家最大能源公司TransCanada PipeLines Limited的原型Web服务实现做了高层次的技术回顾.TransCanada的 ...

  3. [转载]Java Web 服务,第 1 部分: Java Web 服务在未来一年内的发展

    Java Web 服务,第 1 部分: Java Web 服务在未来一年内的发展 2006 年中,Web 服务领域将发生翻天覆地的变化.对于 Java™ 开发人员而言,这些变化将包括新 Web 服务框 ...

  4. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  5. Web 服务系列标准和规范

    Web 服务系列标准是一组新兴标准,支持异类信息技术流程和系统间的互操作集成.可以将其视为一种新的具有自包含性和自描述性的 Web 应用程序,能提供从最基本的到最复杂的业务和科学流程的功能和互操作机制 ...

  6. WSDL: 描述你的Web服务

    WSDL: 描述你的Web服务 柴晓路 2001-8-13 本文最初由 IBM developerWorks 中国网站发表,其网址是 http://www.ibm.com/developerWorks ...

  7. 【转】Web服务软件工厂

    patterns & practices开发中心 摘要 Web服务软件工厂(英文为Web Service Software Factory,也称作服务工厂)是一个集成的工具.模式.源代码和规范 ...

  8. 《Webservice的应用与开发》学习笔记 ·001【Web服务、XML文档】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.Web服务 1.特点 2.定义 二.XML文档 ...

  9. 通过数据库存储过程调用Web服务的办法

    Web服务概览 Web服务,从广义而言,就是在两个应用或电子设备之间通过万维网通信的方法.Web服务有两种类型:简单对象访问协议(SOAP)以及表述性状态转移(REST). SOAP为基于XML的消息 ...

最新文章

  1. Ajax实现无刷新三联动下拉框
  2. EngJS(超轻量) 中数据双向绑定如何使用
  3. mysql index 使用方法_mysql index索引使用方法
  4. Java中使用Jedis操作Redis
  5. python宣传图片_宣传图片制作网站
  6. BugkuCTF-MISC题convert
  7. 支付宝发布数据可视化规范,可视化分析有套路!
  8. Java千百问_01基本概念(003)_J2EE里面的2是什么意思
  9. tar打包/解包用法
  10. vue 源码 断点调试
  11. uml边界类例子_UML中边界类、控制类和实体类
  12. zepto怎么设置宽高_【五个阿道夫】剧本杀测评 | 娱乐流量当道的时代 这个世界怎么了...
  13. Kotlin 官方参考文档翻译完毕
  14. 二、Json对象、Json数组和Json字符串
  15. 【基于熵权-模糊综合评价法】《基于熵权-模糊综合评价法的施工项目风险评价研究》论文笔记(内附MATLAB代码)
  16. 华罗庚杯数学竞赛考试时间
  17. Ubuntu更新nvidia显卡驱动
  18. 基于opencv的简单数字识别
  19. 屏蔽广告效果好的手机浏览器,这3款你一定不要错过
  20. TIA西门子博途V17安装教程及注意事项

热门文章

  1. 爱克发胶片_GE AGFA 胶片
  2. 记一次在西部数码上买域名的悲催经历
  3. vs code格式化代码
  4. Java Web学习笔记06:利用JDBC访问数据库
  5. 【多题合集】线段覆盖1、2、3
  6. 论文笔记 - 《Very Deep Convolutional Networks For Large-Scale Image Recognition》 精典
  7. 2017.3.13 木棍分割 思考记录
  8. finalshell连接超时怎么解决_vncviewer连接超时,vncviewer连接超时怎么解决
  9. linux查看分区访问权限,linux查看分区是否开启acl权限
  10. eclipse中文乱码解决_Stata中文乱码顽疾解决方法-一行命令