Web服务生存周期内发生的事件/Soap扩展的阶段/Soap扩展的步骤
2007-10-27 09:49
567 查看
客户端创建WEB服务代理类的一个新实例,该对象驻留在客户端所在的同一台计算机上.
客户端调用代理类上的方法.
客户端计算机上的ASP.NET框架的基础结构将WEB服务方法的参数序列化为SOAP消息,并通过网络将它发送给WEB服务.
ASP.NET框架基础结构结收SOAP消息并反序列化该XML.他创建了WEB服务类的实例并调用WEB服务方法,同时将返序列化的XML作为参数传入.
WEB服务方法执行其代码,最终会设置返回值和任何输出参数.
WEB服务器上的ASP.NET框架基础结构将返回值和输出参数序列化为SOAP消息,并通过网络发送回客户端.
客户端计算机上的ASP.NET框架基础结构接收该SOAP消息,将XML反序列化为返回值和任何输出参数.并将它们传给代理类的实例.
客户端接收返回值和任何输出参数.
SOAP扩展可能检查或修改SOAP的阶段
AfterDeserialize: 发生在将SOAP消息反序列化到对象之后的阶段.
AfterSerialize: 发生在序列化之后,但在通过网络发送SOAP消息之前.
BeforeDeserialize: 发生在反序列批这前,但在网络发送之后.
BeforeSeralize: 发生在序列化之前.
SOAP扩展的步骤:
从SoapExtension派生一个类.
保存对表示将来SOAP消息的Stream的引用.
初始化SOAP扩展.
在相关的SoapMessageStage或多个阶段中处理SOAP消息.
配置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. 客户端接收返回值与任何输出参数.
客户端调用代理类上的方法.
客户端计算机上的ASP.NET框架的基础结构将WEB服务方法的参数序列化为SOAP消息,并通过网络将它发送给WEB服务.
ASP.NET框架基础结构结收SOAP消息并反序列化该XML.他创建了WEB服务类的实例并调用WEB服务方法,同时将返序列化的XML作为参数传入.
WEB服务方法执行其代码,最终会设置返回值和任何输出参数.
WEB服务器上的ASP.NET框架基础结构将返回值和输出参数序列化为SOAP消息,并通过网络发送回客户端.
客户端计算机上的ASP.NET框架基础结构接收该SOAP消息,将XML反序列化为返回值和任何输出参数.并将它们传给代理类的实例.
客户端接收返回值和任何输出参数.
SOAP扩展可能检查或修改SOAP的阶段
AfterDeserialize: 发生在将SOAP消息反序列化到对象之后的阶段.
AfterSerialize: 发生在序列化之后,但在通过网络发送SOAP消息之前.
BeforeDeserialize: 发生在反序列批这前,但在网络发送之后.
BeforeSeralize: 发生在序列化之前.
SOAP扩展的步骤:
从SoapExtension派生一个类.
保存对表示将来SOAP消息的Stream的引用.
初始化SOAP扩展.
在相关的SoapMessageStage或多个阶段中处理SOAP消息.
配置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. 客户端接收返回值与任何输出参数.
相关文章推荐
- 用pear::soap创建web服务的步骤
- 使用 AJAX 调用SOAP Web 服务,第 2 部分: 扩展 Web 服务客户机
- 从 PHP 脚本中访问企业应用程序 使用 PHP 5 SOAP 扩展访问 WebSphere Web 服务
- 使用 AJAX 调用SOAP Web 服务,第 2 部分: 扩展 Web 服务客户机
- 如何在Linux下部署web程序(搭建vsftp服务,搭建sshd 服务器,jdk安装步骤,Tomcat安装步骤,MySQL安装步骤)
- web服务发生错误 System.IO.FileNotFoundException 解决办法
- Web 服务编程,REST 与 SOAP
- 软件生存周期各阶段活动定义浅释
- 使用 iisext.vbs 禁用 Web 服务扩展的方法
- 使用 Iisext.vbs 启用Web服务扩展文件的方法
- vc 启动一个web服务扩展
- 使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务提供
- 今天2003的iis 始终无法访问。net2.0的项目,原来是web服务扩展没有2.0的扩展 下面是加上的方法
- IIS WEB服务扩展里没有ASP.NET v2.0导致无法正常浏览.ASPX文件
- Web 服务编程,REST 与 SOAP
- Web服务搜索与执行引擎---WSDL与SOAP
- Web 服务编程,REST 与 SOAP
- 查看PHP opcode扩展模块及Web服务