SoapTypeNameSpace (メソッド・キーワード)
使用法
(メソッドが Web メソッドとして使用される場合の) タイプの既定の XML ネームスペースをオーバーライドするには、以下の構文を使用します。
Method name(formal_spec) As returnclass [ SoapTypeNameSpace = "soapnamespace", SoapBindingStyle = document, WebMethod ]
{ //implementation }
soapnamespace はネームスペース URI です。URI にコロン (:) が含まれる場合、文字列は引用符で囲む必要があります。つまり、次のように使用できます。
Method MyMethod() [ SoapTypeNameSpace = "http://www.mynamespace.org", SoapBindingStyle = document, WebMethod ]
また、次のようにすることもできます。
Method MyMethod() [ SoapTypeNameSpace = othervalue, SoapBindingStyle = document, WebMethod ]
ただし、次のようにはできません。
Method MyMethod() [ SoapTypeNameSpace = http://www.mynamespace.org, SoapBindingStyle = document, WebMethod ]
手動で作成した Web サービスでは、通常はこのキーワードの既定値が最適な値となります。SOAP ウィザードで WSDL から Web クライアントまたは Web サービスを生成すると、このキーワードはその WSDL に最適に設定されます。この値を変更すると、Web クライアントまたは Web サービスは機能しなくなる場合があります。
詳細
このキーワードは、この Web メソッドが使用するタイプの XML ネームスペースを指定します。詳細は、"Web サービスおよび Web クライアントの作成" を参照してください。
このキーワードは、メソッドがドキュメント・スタイルのバインディングを使用する場合にのみ有効です。つまり、メソッド (またはそれを含むクラス) は、SoapBindingStyle = document とマークする必要があります。(RPC スタイルのバインディングを使用するメソッドでこのキーワードを指定しても意味がありません。)
既定値
このキーワードを省略すると、このメソッドのタイプは、Web サービスまたはクライアント・クラスの TYPENAMESPACE パラメータで指定されるネームスペースに配置されます。TYPENAMESPACE が指定されない場合、タイプは、Web サービスまたはクライアントの NAMESPACE パラメータで指定されるネームスペースに配置されます。
WSDL との関係
SoapTypeNameSpace キーワードは、WSDL の次のパートに影響します。
-
<definitions> 要素内のネームスペース宣言。指定したネームスペース (http://www.customtypes.org など) は、ここに追加されます。以下に例を示します。
... xmlns:ns2="http://www.customtypes.org" xmlns:s0="http://www.wbns.org" xmlns:s1="http://webservicetypesns.org" ... targetNamespace="http://www.wbns.org"
この例では、http://www.customtypes.org ネームスペースは、接頭語 ns2 に割り当てられます。
WSDL では、通常どおり、次のネームスペースも宣言します。
-
Web サービスのネームスペース (http://www.wsns.org)。この例では、これは接頭語 s0 に割り当てられ、Web サービスのターゲットのネームスペースとしても使用されます。
-
Web サービスのタイプのネームスペース (http://www.webservicetypesns.org)。この例では、これは接頭語 s1 に割り当てられます。
Web サービス・クラスでタイプのネームスペースが指定されない場合、このネームスペースは WSDL に含まれません。
-
-
<types> 要素。これは、targetNamespace 属性が、SoapTypeNameSpace で指定されたネームスペースと等しい <schema> 要素を含みます。
<types> ... <s:schema elementFormDefault="qualified" targetNamespace="http://www.customtypes.org"> <s:element name="Add"> <s:complexType> <s:sequence> <s:element minOccurs="0" name="a" type="s:decimal"/> <s:element minOccurs="0" name="b" type="s:decimal"/> </s:sequence> </s:complexType> </s:element> <s:element name="AddResponse"> <s:complexType> <s:sequence> <s:element name="AddResult" type="s:decimal"/> </s:sequence> </s:complexType> </s:element> </s:schema> ... </types>
一方、SoapTypeNameSpace を指定しない場合、WSDL のこのパートは次のようになります。<schema> 要素の targetNamespace は、Web サービスのタイプのネームスペースです。
<types> ... <s:schema elementFormDefault="qualified" targetNamespace="http://www.webservicetypesns.org"> <s:element name="Add"> <s:complexType> <s:sequence> <s:element minOccurs="0" name="a" type="s:decimal"/> <s:element minOccurs="0" name="b" type="s:decimal"/> </s:sequence> </s:complexType> </s:element> <s:element name="AddResponse"> <s:complexType> <s:sequence> <s:element name="AddResult" type="s:decimal"/> </s:sequence> </s:complexType> </s:element> </s:schema> ... </types>
(また、Web サービス・クラスでタイプのネームスペースが指定されない場合、targetNamespace は Web サービスのネームスペースになります。)
メッセージへの影響
この 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>
<AddResponse xmlns="http://www.customtypes.org">
<AddResult>3</AddResult>
</AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<AddResponse> 要素は、"http://www.customtypes.org" ネームスペース内にあります。
一方、SoapTypeNameSpace キーワードを指定しない場合、メッセージは以下のようになります。
<?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 xmlns="http://www.webservicetypesns.org">
<AddResult>3</AddResult>
</AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>