SoapBodyUse (クラス・キーワード)
使用法
このクラスの Web メソッドの入力および出力により使用されるエンコードを指定するには、以下の構文を使用します。
Class MyApp.MyClass [ SoapBodyUse = soapbodyuse ] { //class members }
soapbodyuse は以下のいずれかになります。
-
literal (既定値) — このクラスの Web メソッドは、リテラル・データを既定で使用します。つまり、SOAP メッセージの <Body> の中の XML は、WSDL で提供されるスキーマと一致します。
-
encoded — このクラスの Web メソッドは、SOAP でエンコードされたデータを既定で使用します。つまり、SOAP メッセージの <Body> の中の XML では、以下の仕様に従い、使用される SOAP のバージョンに応じて SOAP エンコードを使用します。
手動で作成した Web サービスでは、通常はこのキーワードの既定値が最適な値となります。SOAP ウィザードで WSDL から Web クライアントまたは Web サービスを生成すると、このキーワードはその WSDL に最適に設定されます。この値を変更すると、Web クライアントまたは Web サービスは機能しなくなる場合があります。
詳細
このキーワードにより、このクラスで定義された任意の Web メソッドが使用する既定のエンコードを指定します。これは、このトピックのサブセクションでも説明しますが、このクラスの ELEMENTQUALIFIED および XMLELEMENT パラメータの既定値も制御します。
SoapBodyUse メソッド・キーワードまたは SoapBodyUse クエリ・キーワードを使用して、個々のメソッドのキーワードをオーバーライドできます。
サブクラスへの影響
このキーワードは継承されません。
既定値
既定値は literal です。SOAP 標準 v1.1 (Chapter 5Opens in a new tab) では、Web メソッドで SOAP エンコードを使用するように規定しています。ただし、.NET を含むほとんどの SOAP では、リテラル・スタイルを使用しています。
WSDL との関係
SoapBodyUse キーワードにより、WSDL の <binding> セクション内の <soap:body> 要素の use 属性の値を指定します。例えば、SoapBodyUse が literal の場合、WSDL は次のようになります。
...
<binding name="MyServiceNameSoap"
...
<soap:binding ...
<operation name="Add">
<soap:operation ...>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
...
一方、SoapBodyUse が encoded の場合は、WSDL は次のようになります。
...
<binding name="MyServiceNameSoap" ...
<soap:binding ...
<operation name="Add">
<soap:operation .../>
<input>
<soap:body use="encoded" namespace="http://www.mynamespace.org"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="http://www.mynamespace.org"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
...
SOAP 1.2 では、encodingStyle 属性は次のようになります。
encodingStyle="http://www.w3.org/2003/05/soap-encoding"
SoapBodyUse キーワードでは、各 Web メソッドに対する <message> 要素の <part> 要素の内容も決定します。
-
SoapBodyUse が literal の場合、各 <part> 要素には、element 属性が含まれます。以下に例を示します。
<part name="parameters" element="s0:Add"/>
別の例を示します。
<part name="b" element="s0:b"/>
-
SoapBodyUse が encoded の場合、各 <part> 要素には、element 属性でなく、type 属性が含まれます。以下に例を示します。
<part name="a" type="s0:ComplexNumber"/>
SoapBodyUse は、ELEMENTQUALIFIED および XMLELEMENT パラメータの既定値も制御します。これも、WSDL に影響します。
SOAP メッセージへの影響
ドキュメント・スタイルのメッセージを使用する Web メソッドでは、Web サービスは次のような応答メッセージを送信します。
<?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>
<AddResponse ...>
...
一方、エンコードスタイルのメッセージを使用する Web サービスでは、応答メッセージは次のようになります。
<?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'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:tns='http://www.mynamespace.org'
xmlns:types='http://www.mynamespace.org'>
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<types:AddResponse>
...
Web サービスまたは Web クライアントのパラメータの既定への影響
ELEMENTQUALIFIED パラメータの既定値は、SoapBodyUse キーワードによって異なります。
SoapBodyUse の値 | ELEMENTQUALIFIED の既定値 | メモ |
---|---|---|
literal | 1 | elementFormDefault="qualified" |
encoded | 0 | elementFormDefault="unqualified" |
XMLELEMENT パラメータの既定値も、SoapBodyUse キーワードによって異なります。
SoapBodyUse の値 | XMLELEMENT の既定値 | メモ |
---|---|---|
literal | 1 | メッセージ・パートには element 属性があります。 |
encoded | 0 | メッセージ・パートには type 属性があります。 |
ELEMENTQUALIFIED パラメータと XMLELEMENT パラメータの詳細は、"オブジェクトの XML への投影" を参照してください。
%XML.DataSet での使用
タイプ %XML.DataSetOpens in a new tab のオブジェクトの場合、SoapBindingStyle キーワードと SoapBodyUse キーワードのすべての組み合わせがサポートされるわけではありません。詳細は、SoapBindingStyle クラス・キーワードのエントリを参照してください。