第七章 定义单向 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 响应。