第十九章 SOAP 错误处理
本主题介绍如何处理 Web
服务和 Web
客户端内的故障。
请注意,SOAPPREFIX
参数会影响任何 SOAP
错误中使用的前缀;请参阅指定 SOAP
信封前缀。
Web
服务中的默认故障处理
默认情况下,当 IRIS
数据平台 Web
服务遇到错误时,它会返回包含故障的标准 SOAP
消息。以下显示了一个示例(针对 SOAP 1.1
)。此示例中省略了 SOAP
信封:
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>Server Application Error</faultstring>
<detail>
<error xmlns='https://www.myapp.org' >
<text>ERROR #5002: ObjectScript error: <DIVIDE>zDivide^FaultEx.Service.1</text>
</error>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
在 Web
服务中返回自定义 SOAP
错误
要创建并返回自定义 SOAP
错误,请在捕获错误的代码的适当区域内执行以下操作:
- 创建包含适当信息的错误对象。为此,请调用
Web
服务的以下方法之一:MakeFault()
、MakeFault12()
、MakeSecurityFault()
或MakeStatusFault()
。这些将在下一小节中讨论。
或者手动创建一个故障对象,如本主题后面所述。
- 调用
Web
服务的ReturnFault()
方法,将故障对象作为参数传递。请注意,ReturnFault()
不会返回给其调用者;它只是发送故障并终止Web
方法的处理。
以下显示一个例子:
Method Divide(arg1 As %Numeric, arg2 As %Numeric) As %Numeric [ WebMethod ]
{
Try {
Set ans=arg1 / arg2
} Catch {
//<detail> element must contain element(s) or whitespace
//specify this element by passing valid XML as string argument to MakeFault()
set mydetail="<mymessage>Division error detail</mymessage>"
set fault=..MakeFault($$$FAULTServer,"Division error",mydetail)
// ReturnFault must be called to send the fault to the client.
// ReturnFault will not return here.
Do ..ReturnFault(fault)
}
Quit ans
}
网友评论