第十章 为 Web 服务指定自定义传输

66 阅读2分钟

第十章 为 Web 服务指定自定义传输

为 Web 服务指定自定义传输

默认情况下, Web 服务以特定方式响应传输,具体方式如下所述。可以自定义此行为。

背景

Web 服务收到 SOAP 消息时,它会执行其 OnSOAPRequest() 类方法。默认情况下,此方法执行以下操作:

  1. 通过调用其 Initialize() 方法初始化 Web 服务实例。此方法解析入站 SOAP 消息,通过引用返回多条信息,并处理安全标头。请参阅 %SOAP.WebService 类的文档。
  2. 设置 Web 服务实例的属性,例如 SoapFault 等。
  3. 初始化响应流。
  4. 调用 Web 服务的 Process() 方法,并将 SOAP 操作和要调用的方法传递给它。
  5. 通过调用 Reset() 方法来重置 Web 服务实例。
  6. 将结果复制到响应流中。

Web 服务定义自定义传输

要使用自己的传输实现 Web 服务,请使用传输将 SOAP 消息作为流获取,实例化 Web 服务类并调用其 OnSOAPRequest() 类方法。

OnSOAPRequest() 方法必须将请求传输到 Web 服务并获取响应。要指示错误,它必须在响应流中返回 SOAP 错误。此方法的签名必须如下:

Method OnSOAPRequest(action,requestStream, responseStream) 

其中:

  • action 是一个 %String,用于指定 SOAP 操作。最后一个“.”后面的操作字符串部分用作使用正确描述符类的方法名称。如果 actionnull,则 SOAP 主体中第一个元素(包装元素)的元素名称将用作方法名称。

  • requestStream 是一个包含根据 XML 指令的编码属性编码的 SOAP 请求消息的流。

  • responseStream 是作为 SOAP 响应生成的字符流,其中包含以 UTF-8 编码的响应 SOAP 消息。可以在调用 OnSOAPRequest() 之前创建此参数,并将其与方法调用一起传递。或者,此参数可以是通过引用传递的变量。在这种情况下,OnSOAPRequest() 必须将其设置为包含响应的的 %FileCharacterStream 实例。