第九章 从 Web 客户端指定自定义传输

文章目录

  • [第九章 从 Web 客户端指定自定义传输](#第九章 从 Web 客户端指定自定义传输)
  • [从 Web 客户端指定自定义传输](#从 Web 客户端指定自定义传输)
  • 背景
  • [为 Web 客户端定义自定义传输](#为 Web 客户端定义自定义传输)

第九章 从 Web 客户端指定自定义传输

从 Web 客户端指定自定义传输

默认情况下,如果使用 Web 客户端,Web 客户端将使用 HTTP 将 SOAP 消息传输到 Web 服务并接收响应。可以定义并使用自己的传输类。

背景

为了与其使用的 Web 服务进行通信, Web 客户端需要一个传输类。传输类包含与通信相关的参数、属性和方法。整体通信工作方式如下:

  1. 运行 Web 客户端代理方法时,Web 客户端实例会检查其 Transport 属性的值。

如果此属性为空,则 Web 客户端实例将使用自身作为传输类实例。可以将 Transport 属性设置为其他合适类的实例(如果已定义此类)。

  1. Web 客户端实例执行传输类的 DoSOAPRequest() 方法,并传递以下参数:

a. Web 客户端类的 OREF。

b. 指定 SOAP 操作的字符串。

c. 包含以 UTF-8 编码的请求的流。

d. (通过引用)包含响应的流。

  1. Web 客户端实例检查结果的状态并采取相应行动。

对于 HTTP 传输,DoSOAPRequest() 方法包括以下逻辑:

  1. 创建请求对象(%Net.HttpRequest 的实例)并设置其属性。此处,该方法使用 Web 客户端实例的属性值,特别是 HttpRequestHeaderCharset 和其他与 HTTP 相关的属性。
  2. 遍历 SOAP 请求中的标头并初始化请求对象中的标头。
  3. 执行请求对象的Post()方法,这是一个适合HTTP传输的动作。
  4. 获取响应并返回。

重要提示:请勿直接使用 %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。
相关推荐
计算机魔术师9 分钟前
AI渗透框架3小时破云,中国黑客组织正在升级打法
前端
蒲公英内测分发12 分钟前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
零域行者18 分钟前
Linux入门基础命令
linux·服务器·安全·web安全
朱涛的自习室18 分钟前
高价软件已死,我让 AI 开启了「平替计划」(Day 7 / 7)
android·前端·github
FY@-@26 分钟前
云计算基础(下):虚拟化原理与 DAS/NAS/SAN 存储
运维·服务器·云计算
沙蒿同学34 分钟前
Wails v3 实战:一个桌面提醒客户端,从 v2 升到 v3 的全过程
前端·后端·github
溜达的大象35 分钟前
飞牛NAS部署ONLYOFFICE Docs:把文档、表格和PPT的在线编辑能力放到自己的服务器上
运维·服务器·powerpoint
erzong23143 分钟前
Linux操作系统:基于环形队列&信号量实现多生产者多消费者的简易模型
linux·运维·服务器
小羊没烦恼!1 小时前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
java·linux·运维·服务器·开发语言·数据库·mysql
inquisiter1 小时前
KernelGpt的部分尝试
java·前端·apache