第十一章 在 Web 服务中定义自定义处理

2024-08-02  本文已影响0人  Cache技术分享

第十一章 在 Web 服务中定义自定义处理

在 Web 服务中定义自定义处理

在极少数情况下,定义使用自定义处理来处理入站消息和构建响应消息的 台 Web 服务可能会很有用。在这些情况下,可以在 Web 服务中实现 ProcessBodyNode() 方法或 ProcessBody() 方法。本主题提供了详细信息。

概述

在自定义处理中,可以解析入站消息并手动构建响应。要求如下:

无论哪种情况,构建的响应消息都必须与 Web 服务的 WSDL 一致。

实现 ProcessBodyNode()

ProcessBodyNode() 方法具有以下签名:

method ProcessBodyNode(action As %String, body As %XML.Node, 
       ByRef responseBody As %CharacterStream) as %Boolean

其中:

如果在 Web 服务中实现此方法,则该方法应执行以下操作:

  1. 检查操作并相应地分支。例如:
 if action["action1" { 
  //details
 }
  1. 如果需要访问 SOAP <Envelope> (例如,访问其命名空间声明),请使用 body 的 Document 属性。这相当于 %XML.Document 的一个实例,它将 SOAP 信封表示为 DOM(文档对象模型)。否则,直接使用主体。
  2. 现在有以下选择:
 set writer=##class(%XML.Writer).%New()
 do writer.OutputToString()
 do writer.DocumentNode(body)
 set request=writer.GetXMLString(.sc)
 // check returned status and continue
  1. 如果在处理请求期间发生错误,则使用 ReturnFault() 方法以通常的方式返回错误。
  2. 使用响应流的 Write() 方法写入将成为 <Body> 子元素的 XML 片段。
  3. 如果创建了响应流,则返回 1。否则,返回 0,这导致 IRIS 运行与给定操作相关的 Web 方法。
  if action["action1" { 
    //no custom processing for this branch
    quit 0
   } elseif action["action2" {
      //details
      //quit 1
   }
上一篇 下一篇

猜你喜欢

热点阅读