文章目录
- [第九章 从 Web 客户端指定自定义传输](#第九章 从 Web 客户端指定自定义传输)
- [从 Web 客户端指定自定义传输](#从 Web 客户端指定自定义传输)
- 背景
- [为 Web 客户端定义自定义传输](#为 Web 客户端定义自定义传输)
第九章 从 Web 客户端指定自定义传输
从 Web 客户端指定自定义传输
默认情况下,如果使用 Web
客户端,Web
客户端将使用 HTTP
将 SOAP
消息传输到 Web
服务并接收响应。可以定义并使用自己的传输类。
背景
为了与其使用的 Web
服务进行通信, Web
客户端需要一个传输类。传输类包含与通信相关的参数、属性和方法。整体通信工作方式如下:
- 运行 Web 客户端代理方法时,
Web
客户端实例会检查其Transport
属性的值。
如果此属性为空,则 Web
客户端实例将使用自身作为传输类实例。可以将 Transport
属性设置为其他合适类的实例(如果已定义此类)。
Web
客户端实例执行传输类的DoSOAPRequest()
方法,并传递以下参数:
a. Web
客户端类的 OREF
。
b. 指定 SOAP
操作的字符串。
c. 包含以 UTF-8
编码的请求的流。
d. (通过引用)包含响应的流。
Web
客户端实例检查结果的状态并采取相应行动。
对于 HTTP
传输,DoSOAPRequest()
方法包括以下逻辑:
- 创建请求对象(
%Net.HttpRequest
的实例)并设置其属性。此处,该方法使用Web
客户端实例的属性值,特别是HttpRequestHeaderCharset
和其他与HTTP
相关的属性。 - 遍历
SOAP
请求中的标头并初始化请求对象中的标头。 - 执行请求对象的
Post()
方法,这是一个适合HTTP
传输的动作。 - 获取响应并返回。
重要提示:请勿直接使用 %SOAP.WebClient
的 DoSOAPRequest()
方法。我们无法保证其行为或未来操作。上述摘要仅作为一般提示提供。
为 Web 客户端定义自定义传输
要使 Web 客户端能够使用自定义传输,请定义自定义传输类。然后,在创建 Web 客户端实例后,将其 Transport
属性设置为等于传输类的实例。
transport
类别的要求如下:
- 该类必须是可实例的(即非抽象的)。
- 该类必须实现如下所述的
DoSOAPRequest()
方法。
DoSOAPRequest()
方法应将请求传输到 Web
服务并获取响应。此方法的签名必须如下:
Method DoSOAPRequest(webClient,action,requestStream, responseStream) As %Status
webClient
是Web
客户端类的OREF
。action
是%String
,它指定了SOAP
操作。requestStream
是包含以UTF-8
编码的请求的流。responseStream
是DoSOAPRequest()
用于写入响应的参数中的%FileBinaryStream
此流必须包含?xml
指令的编码属性指定的字符集中的数据。建议使用UTF-8
。