第七章 定义单向 Web 方法
定义单向 Web
方法
对于 Web
服务,通常,当执行 Web
方法时,即使该方法没有返回类型且不返回任何内容,也会返回 SOAP
消息。此 SOAP
响应消息具有以下一般格式:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<MethodNameResponse xmlns="http://www.myapp.org"></MethodNameResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在极少数情况下,可能需要将 Web
方法定义为单向的。此类方法不得返回任何值,并且请求消息不应有任何 SOAP
响应。要定义单向 Web 方法,请将方法的返回类型定义为 %SOAP.OneWay
。在这种情况下:
-
WSDL
没有定义为该Web
方法定义的输出。 -
Web
服务不返回SOAP
消息(除非服务添加了标头元素;请参阅小节)。也就是说,HTTP
响应消息不包含任何XML
内容。
注意:通常不应使用单向方法。请求-响应对更为常见、更受支持且更受期待 — 即使对于没有返回类型的方法也是如此。
单向 Web
方法和 SOAP
标头
如果 Web
方法添加了标头元素,则 HTTP
响应确实包含 XML
内容,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' ...
<SOAP-ENV:Header>
header elements as set by the web service
</SOAP-ENV:Header>
<SOAP-ENV:Body></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
动态地使 Web
方法单向
还可以动态地将 Web
方法重新定义为单向。为此,请在 Web
方法的定义中调用 Web
服务的 ReturnOneWay()
。例如:
Method HelloWorldDynamic(oneway as %Boolean = 0) As %String [ WebMethod ]
{
If oneway {Do ..ReturnOneWay() }
Quit "Hello world "
}
如果参数为 0
,则此 Web
方法返回一个 SOAP
响应,其主体包含 Hello world
。如果参数为 1
,则此方法不返回 SOAP
响应。
网友评论