単方向 Web メソッドの定義
InterSystems IRIS® データ・プラットフォーム 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.OneWayOpens in a new tab として定義します。この場合は以下のようになります。
-
WSDL は、この Web メソッドに対して定義される出力を定義しません。
-
Web サービスは、SOAP メッセージを返しません (サービスによってヘッダ要素が追加される場合は除く。サブセクションを参照)。つまり、HTTP 応答メッセージには XML コンテンツが含まれません。
通常、単方向メソッドは使用されません。返りタイプがないメソッドの場合でも、要求と応答のペアを使用する方法のほうがより一般的であり、広くサポートされ、必要とされています。
"単方向 Web メソッドの WSDL の相違点" を参照してください。
単方向の 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 メソッドは、本文に "Hello world" という文字列が含まれる SOAP 応答を返します。この引数が 1 の場合、このメソッドは SOAP 応答を返しません。