文章
· 七月 30 阅读大约需 3 分钟

第九章 使用进程私有全局变量来支持非常大的消息

第九章 使用进程私有全局变量来支持非常大的消息

使用进程私有全局变量来支持非常大的消息

默认情况下、 Web 服务在解析请求或响应时通常使用本地数组内存。可以强制它改用进程私有全局变量;这使 Web 服务能够处理非常大的消息。

为此,请指定 Web 服务类的 USEPPGHANDLER 参数,如下所示:

Parameter USEPPGHANDLER = 1;

如果此参数为 1,则 Web 服务在解析请求或响应时始终使用进程私有全局变量。如果此参数为 0,则 Web 服务始终使用本地数组内存来实现这些目的。如果未设置此参数,则 Web 服务使用默认值,通常是本地数组内存。

自定义 Web 服务的回调

可以通过覆盖其回调方法来定制 Web 服务的行为:

OnRequestMessage()

如果没有安全错误,则在 Web 服务收到请求消息时调用;如果出现安全错误,则不会调用此回调。系统在执行安全处理、检查信封是否有错误以及处理 WS-Addressing 标头中指定的操作(如果有)后调用此回调。此回调对于记录原始 SOAP 请求等任务很有用。

此方法具有以下签名:

Method OnRequestMessage(mode As %String, action As %String, request As %Stream.Object)

其中:

  • mode 指定 SOAP 请求的类型。该类型为“SOAP”“binary”
  • action 包含 SOAPAction 标头的值。
  • 请求以流的形式包含 SOAP 请求消息。

此方法可以使用对象 %request,它是 %CSP.Session 实例。在此对象中:

  • Content 属性包含原始请求消息。
  • NextMimeData() 实例方法使能够检索单个 MIME 部分(如果这是一个 MIME SOAP 请求)。

此方法还可以使用 Web 服务实例的属性。初始化期间设置以下属性:

  • ImportHandler 属性包含已解析的 SOAP 请求消息的 DOM
  • SecurityIn 属性包含 WS-Security 标头元素。有关详细信息,请参阅保护 Web 服务。
  • SecurityNamespace 属性包含 WS-Security 标头元素的命名空间。
  • 如果生成了 SOAP 错误,则会设置 SoapFault 属性。

要在 OnRequestMessage() 中返回错误,请设置 SoapFault 属性。不要调用 ReturnFault() 方法。

OnPreWebMethod()

在执行 Web 方法之前调用;默认情况下不执行任何操作。此方法不接受任何参数,也不能返回任何值。因此,此方法无法更改 Web 服务的执行,除非以与 Web 方法相同的方式返回 SOAP 错误。

此方法可以使用 %request%sessionWeb 服务属性。请注意,Web 服务的 MsgClass 属性是包含 Web 方法参数的消息描述符类。

OnPostWebMethod()

在执行 Web 方法后立即调用;默认情况下不执行任何操作。此方法不接受任何参数,也不能返回任何值。因此,此方法无法更改 Web 方法的执行或返回值。自定义此方法主要是为了清理 OnPreWebMethod() 创建的必需结构。

讨论 (0)1
登录或注册以继续