美文网首页
第十一章 在 Web 服务中定义自定义处理

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

作者: Cache技术分享 | 来源:发表于2024-08-02 07:33 被阅读0次

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

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

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

概述

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

  • Web 服务中,可以定义具有所需签名的 Web 方法。这样做是为了建立 Web 服务的 WSDL。这些 Web 方法(或其中一些)可以是存根。仅当 ProcessBodyNode()ProcessBody() 返回 0 时,才会执行方法。

  • 此外,在 Web 服务中,可以实现以下方法之一:

    • ProcessBodyNode() — 此方法接收 SOAP 主体作为 %XML.Node 的实例。可以使用 XML 工具处理此实例并构建响应消息。SOAP 信封中 %XML.Node的此实例的 Document 属性中可用。
    • ProcessBody() — 此方法以流的形式接收 SOAP 主体。由于 SOAP 主体是 XML 片段而不是 XML 文档,因此您无法使用 XML 工具来读取它。相反,可以使用 ObjectScript 函数解析流并提取所需的部分。

    如果同时定义这两种方法,则会忽略 ProcessBodyNode() 方法。

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

实现 ProcessBodyNode()

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

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

其中:

  • action 是入站消息中指定的 SOAP 操作。
  • body%XML.Node 的一个实例,中包含 SOAP <Body>
  • responseBody 是序列化为 %Library.CharacterStream 实例的响应主体。此流通过引用传递,最初为空。

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

  1. 检查操作并相应地分支。例如:
 if action["action1" { 
  //details
 }
  1. 如果需要访问 SOAP <Envelope> (例如,访问其命名空间声明),请使用 body 的 Document 属性。这相当于 %XML.Document 的一个实例,它将 SOAP 信封表示为 DOM(文档对象模型)。否则,直接使用主体。
  2. 现在有以下选择:
  • 使用 %XML.Write 将正文写为字符串,然后就可以对其进行操作。例如:
 set writer=##class(%XML.Writer).%New()
 do writer.OutputToString()
 do writer.DocumentNode(body)
 set request=writer.GetXMLString(.sc)
 // check returned status and continue
  • 根据需要使用 %XML.Document%XML.Node浏览文档。同样,使用 %XML.Document或的方法 %XML.Node访问有关文档当前部分的信息。
  • 使用 XPath 表达式提取数据。
  • 执行 XSLT 转换。
  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
   }

相关文章

网友评论

      本文标题:第十一章 在 Web 服务中定义自定义处理

      本文链接:https://www.haomeiwen.com/subject/exlahjtx.html