Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

.NET 逆プロキシ・オブジェクトの使用法

.NET Native SDK は .NET 外部サーバ接続を最大限に活用して、InterSystems IRIS と .NET アプリケーション間の完全に透過的な双方向接続を可能にします。

逆プロキシ・オブジェクトは、外部サーバ・ゲートウェイ接続を介して ObjectScript ターゲット・オブジェクトを制御するための .NET オブジェクトです。逆プロキシ・オブジェクトを使用してターゲットのメソッドを呼び出して、ターゲットのプロパティ値を取得または設定し、ネイティブの .NET オブジェクトのように簡単にターゲット・オブジェクトを操作できます。

このセクションでは、以下のトピックについて説明します。

外部サーバの概要

外部サーバ接続によって、InterSystems IRIS ターゲット・オブジェクトと .NET オブジェクトは同じ接続を使用して、同じコンテキスト (データベース、セッション、トランザクション) で自由に相互作用することができます。外部サーバのアーキテクチャについては "InterSystems 外部サーバの使用法" で詳しく説明していますが、ここでは、外部サーバ接続を、一方の側のプロキシ・オブジェクトがもう一方の側のターゲット・オブジェクトを制御できる単純なブラック・ボックスとして考えることができます。

外部サーバ接続
Object gateway connecting an ObjectScript application on InterSystems IRIS with a .NET application on a Host VM

図に示すように、フォワード・プロキシ・オブジェクトは .NET オブジェクトを制御する ObjectScript プロキシです (詳細は、"InterSystems 外部サーバの使用法" の “外部言語の操作” を参照)。.NET 逆プロキシは反対方向に動作し、.NET アプリケーションが InterSystems IRIS ターゲット・オブジェクトを制御できるようにします。

逆プロキシ・オブジェクトの作成

逆プロキシ・オブジェクトを作成するには、ObjectScript クラス・インスタンスの OREF を取得して (通常は、クラスの %New() メソッドを呼び出して)、IRISObject にキャストします (詳細は、“ObjectScript メソッドおよび関数の呼び出し” を参照)。以下のメソッドを使用して、逆プロキシ・オブジェクトを生成できます。

  • ADO.IRIS.ClassMethodObject() は ObjectScript クラス・メソッドを呼び出して、結果を object のインスタンスとして返します。

  • ADO.IRIS.FunctionObject() は ObjectScript 関数を呼び出して、結果を object のインスタンスとして返します。

%New() メソッドが新しいターゲット・インスタンスを正常に作成すると、そのインスタンスの逆プロキシ・オブジェクトが生成されます。例えば、以下の呼び出しによって、ObjectScript クラス Demo.Test のインスタンスを制御する、test という逆プロキシ・オブジェクトが作成されます。

   IRISObject test = (IRISObject)iris.ClassMethodObject("Demo.Test","%New");
  • ClassMethodObject() は、Demo.Test という ObjectScript クラスの %New() メソッドを呼び出して、そのクラスの新しいターゲット・インスタンスを作成します。

  • %New() への呼び出しでクラスの有効なインスタンスが返された場合、新しいインスタンスの逆プロキシが生成され、classMethodObject() はそれを Object として返します。

  • .NET では、ObjectIRISObject にキャストされ、逆プロキシ変数 test が作成されます。

変数 test は、Demo.Test の新しいターゲット・インスタンスの .NET 逆プロキシ・オブジェクトです。以下のセクションでは、test を使用して Demo.Test ターゲット・インスタンスのメソッドとプロパティにアクセスします。

ターゲット・オブジェクトの制御

逆プロキシ・オブジェクトは IRISObject のインスタンスです。ターゲット・インスタンス・メソッドを呼び出すメソッド Invoke()InvokeVoid()、およびターゲットのプロパティの読み取りと書き込みを行うアクセサ Get()Set() を提供します。このセクションの例では、逆プロキシを使用して、ObjectScript クラス Demo.Test のターゲット・インスタンスを制御します。このクラスには、メソッド initialize()add()、およびプロパティ name の宣言が含まれています。

ObjectScript クラス Demo.Test のメソッドとプロパティの宣言
   Class Demo.Test Extends %Persistent
      Method initialize(initialVal As %String)
      Method add(val1 As %Integer, val2 As %Integer) As %Integer
      Property name As %String

以下の例では、最初の行で Demo.Test の新規インスタンスの test という名前の逆プロキシ・オブジェクトを作成します (前のセクションの説明を参照)。残りのコードでは、test を使用して Demo.Test ターゲット・インスタンスを制御します。

逆プロキシ・オブジェクトによる Demo.Test のインスタンスの制御
// Create an instance of Demo.Test and return a proxy object for it
  IRISObject test = (IRISObject)iris.ClassMethodObject("Demo.Test","%New");

// instance method test.initialize() is called with one argument, returning nothing.
  test.InvokeVoid("initialize", "Test One");

// instance method test.add() is called with two arguments, returning an int value.
  int sum = test.Invoke("add",2,3);  // adds 2 plus 3, returning 5

// The value of property test.name is set and then returned.
  test.Set("name", "Einstein, Albert");  // sets the property to "Einstein, Albert"
  String name = test.Get("name");   // returns the new property value

この例では、以下の IRISObject メソッドを使用して、Demo.Test インスタンスのメソッドとプロパティにアクセスしました。

  • ClassMethodObject() は、Demo.Test クラス・メソッド %New() を呼び出します。このメソッドは Demo.Test のインスタンスを作成し、test という名前の IRISObject プロキシを返します (“リバース・プロキシ・オブジェクトの作成” で前述しています)。

  • InvokeVoid() は、initialize() インスタンス・メソッドを呼び出します。このメソッドは、内部変数を初期化しますが、値は返しません。

  • Invoke() は、add() インスタンス・メソッドを起動します。このメソッドは、2 つの整数の引数を受け入れて、合計を整数として返します。

  • Set() は、name プロパティを新しい値に設定します。

  • Get() は、name プロパティの値を返します。

また、これらのメソッドのデータ型固有のバージョンもありますが、これらについては以下のセクションで説明します。

IRISObject のサポートされているデータ型

前のセクションの例では、汎用の Set()Get()、および Invoke() メソッドを使用しましたが、IRISObject クラスでサポートされるデータ型用にデータ型固有のメソッドも提供します。

IRISObject set() および get() メソッド

IRISObject.Set() メソッドは、IRIS.Set() でサポートされるすべてのデータ型を含む、任意の .NET オブジェクトをプロパティ値として受け入れます (“クラス IRIS のサポートされているデータ型” を参照)。

汎用の Get() メソッドに加えて、IRISObjectGetBool()GetBytes()GetDouble()GetIRISList()GetLong()GetObject()、および GetString() のデータ型固有のメソッドを提供します。

IRISObject invoke() メソッド

IRISObject invoke メソッドは、IRIS クラス・メソッド呼び出しと同じセットのデータ型をサポートしています (“クラス・メソッドの呼び出し” を参照)。

汎用の Invoke() メソッドに加えて、IRISObject は、InvokeBool()InvokeBytes()InvokeDouble()InvokeIRISList()InvokeLong()InvokeObject()InvokeString()、および InvokeVoid() のデータ型固有のメソッドを提供します。また、InvokeStatusCode() も提供します。これは、ObjectScript %Status 返り値の内容を取得します (“%Status エラー・コードの取得” を参照)。

Invoke メソッドはすべて、methodNameString 引数に加え、0 個以上のメソッド引数を取ります。これは、int?short?stringlong?double?float?byte[]bool?DateTime?IRISList?、または IRISObjectのいずれかの型にできます。接続が双方向の場合、任意の .NET オブジェクトを引数として使用できます。

すべての引数の数よりも少ない数の引数を渡すか、末尾の引数に対して null を渡すことで、引数リストで末尾の引数を省略できます。非 null 引数が null 引数の右側に渡されると、例外がスローされます。

FeedbackOpens in a new tab