第十章 为 Web 服务指定自定义传输
为 Web 服务指定自定义传输
默认情况下, Web 服务以特定方式响应传输,具体方式如下所述。可以自定义此行为。
背景
当 Web 服务收到 SOAP 消息时,它会执行其 OnSOAPRequest() 类方法。默认情况下,此方法执行以下操作:
- 通过调用其
Initialize()方法初始化Web服务实例。此方法解析入站SOAP消息,通过引用返回多条信息,并处理安全标头。请参阅%SOAP.WebService类的文档。 - 设置
Web服务实例的属性,例如SoapFault等。 - 初始化响应流。
- 调用
Web服务的Process()方法,并将SOAP操作和要调用的方法传递给它。 - 通过调用
Reset()方法来重置Web服务实例。 - 将结果复制到响应流中。
为 Web 服务定义自定义传输
要使用自己的传输实现 Web 服务,请使用传输将 SOAP 消息作为流获取,实例化 Web 服务类并调用其 OnSOAPRequest() 类方法。
OnSOAPRequest() 方法必须将请求传输到 Web 服务并获取响应。要指示错误,它必须在响应流中返回 SOAP 错误。此方法的签名必须如下:
Method OnSOAPRequest(action,requestStream, responseStream)
其中:
-
action是一个%String,用于指定SOAP操作。最后一个“.”后面的操作字符串部分用作使用正确描述符类的方法名称。如果action为null,则SOAP主体中第一个元素(包装元素)的元素名称将用作方法名称。 -
requestStream是一个包含根据XML指令的编码属性编码的SOAP请求消息的流。 -
responseStream是作为SOAP响应生成的字符流,其中包含以UTF-8编码的响应SOAP消息。可以在调用OnSOAPRequest()之前创建此参数,并将其与方法调用一起传递。或者,此参数可以是通过引用传递的变量。在这种情况下,OnSOAPRequest()必须将其设置为包含响应的的%FileCharacterStream实例。