第九章 使用进程私有全局变量来支持非常大的消息
使用进程私有全局变量来支持非常大的消息
默认情况下、 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、%session 和 Web 服务属性。请注意,Web 服务的 MsgClass 属性是包含 Web 方法参数的消息描述符类。
OnPostWebMethod()
在执行 Web 方法后立即调用;默认情况下不执行任何操作。此方法不接受任何参数,也不能返回任何值。因此,此方法无法更改 Web 方法的执行或返回值。自定义此方法主要是为了清理 OnPreWebMethod() 创建的必需结构。