非スカラー型の登録

提供: RAD Studio
移動先: 案内検索

Web サービスの利用:インデックス への移動

起動可能インターフェースでの非スカラー型の使用にリストされている組み込みスカラー型以外の型を起動可能インターフェイスが使用できるようにするには、アプリケーションがその型をリモート可能タイプ レジストリに登録しなければなりません。リモート可能タイプ レジストリにアクセスするには、uses 節に InvokeRegistry ユニットを追加しなければなりません。このユニットは、リモート可能タイプ レジストリへの参照を返すグローバル関数、RemTypeRegistry を宣言しています。

メモ: 'クライアントでは、リモート可能タイプ レジストリへ型を登録するコードは、WSDL ドキュメントをインポートした際に自動的に生成されます。サーバーでは、リモート可能な型は、それらを使用するインターフェイスを登録した際に、自動的に登録されます。このため、型を登録するコードを明示的に追加する必要があるのは、自動生成された値を使用するのではなく、名前空間や型名を指定したい場合です。

リモート可能タイプ レジストリには、型登録に使用できるメソッドが 2 つ --- RegisterXSInfoRegisterXSClass --- があります。最初のメソッド(RegisterXSInfo)では、動的配列やその他の型の定義を登録できます。2 つ目のメソッド(RegisterXSClass)は、他の型を表すために定義した、リモート可能クラスを登録するためのものです。

動的配列や列挙型を使用する場合は、起動レジストリは、必要な情報を、コンパイラが生成した型情報から取得することができます。このため、たとえば、インターフェイスは次のような型を使用できます:

type
TDateTimeArray = array of TXSDateTime;
typdef DynamicArray<TXSDateTime> TDateTimeArray;

この型は、起動可能インターフェイスの登録時に、自動的に登録されます。しかし、その型が定義された名前空間や、型の名前を指定したい場合には、リモート可能タイプ レジストリの RegisterXSInfo メソッドを使用して型を明示的に登録するためのコードを追加しなければなりません。 登録は、動的配列を宣言または使用するユニットの、初期化セクションに入ります:

RemTypeRegistry.RegisterXSInfo(TypeInfo(TDateTimeArray), MyNameSpace, 'DTarray', 'DTarray');
void RegTypes()
{
RemTypeRegistry()->RegisterXSInfo(__arraytypeinfo(TDateTimeArray),
MyNameSpace, "DTarray", "DTarray");
InvRegistry()->RegisterInterface(__delphirtti(ITimeServices));
}

RegisterXSInfo の第1パラメータは、登録しようとしている型の型情報です。第2パラメータは、型が定義されている名前空間の、名前空間 URI です。このパラメータを省略するか、空文字列を入れた場合、レジストリは名前空間を代わりに生成してくれます。第3パラメータは、ネイティブコードに表示される型の名前です。このパラメータを省略するか、空文字列を入れた場合、レジストリは、第1パラメータに渡した型情報から型名を使用します。最後のパラメータは、WSDL ドキュメントに表示される型の名前です。このパラメータを省略するか、空文字列を入れた場合、レジストリは、ネイティブの型名(第3パラメータ)を使用します。 リモート可能クラスの登録も同様ですが、型情報ポインタではなく、クラス参照が提供されます。たとえば、次の行は XSBuiltIns ユニットからのものです。これは、TXSDateTimeTDateTime 値を表す TRemotable の下位クラス)を登録します。

RemClassRegistry.RegisterXSClass(TXSDateTime, XMLSchemaNameSpace, 'dateTime', ,True);
void RegTypes()
{
RemTypeRegistry()->RegisterXSclass(__classid(TXSDateTime), XMLSchemaNameSpace, "dateTime", "", true);
InvRegistry()->RegisterInterface(__delphirtti(ITimeServices));
}

第1パラメータは、型を表すリモート可能クラスのクラス参照です。第2パラメータは、新しいクラスの名前空間を識別する、URI(統一リソース識別子)です。空文字列を指定した場合、レジストリが代わりに URI を生成します。第3、第4パラメータは、クラスが表すデータ型の、ネイティブ名および外部名を指定します。第4パラメータを省略した場合、タイプ レジストリは、第3パラメータを両方の値に使用します。両方のパラメータに空文字列を指定した場合、レジストリはクラス名を使用します。第5パラメータは、クラス インスタンスの値が文字列として転送できるかを示します。また任意で第6パラメータ(ここには表示されていない)を追加して、同じオブジェクト インスタンスへの複数の参照が、SOAP パケットでどのように表示されるかを制御することも可能です。

関連項目