ゲートウェイ・サーバの実行
ゲートウェイ・サーバの各セッションには、以下のコンポーネントが含まれます。
-
.NET CLR で実行されている .NET ゲートウェイ・サーバのインスタンス (“ゲートウェイ・サーバのバージョン” 参照)
-
Caché ネームスペースで実行されている %Net.Remote.ServiceOpens in a new tab オブジェクト
-
2 つのオブジェクトが通信する一意の TCP ポート
-
1 つまたは複数の接続 (各接続が Caché %Net.Remote.GatewayOpens in a new tab オブジェクトをサーバ・インスタンス内のスレッドにリンク)
詳細な説明およびこれらのコンポーネント間でどのように対話が行われるかを示すいくつかの図は、“ゲートウェイのアーキテクチャ” を参照してください。
サーバの起動
これらの %Net.Remote.ServiceOpens in a new tab メソッドは、サーバを起動するために使用できます。
-
StartGateway() — ゲートウェイ名で指定された .NET ゲートウェイ・サーバを起動します。
-
StartGatewayObject() — ゲートウェイ定義オブジェクトで指定された .NET ゲートウェイ・サーバを起動します。
-
OpenGateway() — 指定されたゲートウェイ名のゲートウェイ定義オブジェクトを取得します。
コマンド・プロンプトからのサーバの起動
開発時やデバッグ時、または Caché と .NET ゲートウェイ・サーバが別々のマシンで稼動している場合は、コマンド・プロンプトからゲートウェイ・サーバを起動すると便利な場合があります。
通常、ゲートウェイ・サーバの実行可能ファイルは既定のディレクトリに置かれます (“ゲートウェイ・サーバのバージョン” を参照してください)。ローカルの Side-By-Side アセンブリ (GAC にインストールされていないアセンブリ) にあるクラスを使用する場合、これらのアセンブリと同じディレクトリに実行可能ファイルをコピーし、そこからそのファイルを実行してアセンブリ間の依存関係を解決します。
次のようにプログラムを実行します。
DotNetGatewaySS port host logfile
以下はその例です。
DotNetGatewaySS 55000 "" ./gatewaySS.log
引数 | 説明 |
---|---|
port | 受信要求をリッスンするポート番号。 |
host | オプション — ゲートウェイ・サーバがリッスンする IP アドレスまたはホスト名を含みます。1 つのアダプタではなくマシン上のすべての IP アダプタ (127.0.0.1、VPN など) をリッスンするには、""、0.0.0.0、または既定値を指定します。 |
logfile | オプション — 指定すると、コマンドのプロシージャによってその名前のログ・ファイルが作成されます。この文字列には、フルパス名を指定する必要があります。 |
サーバ・スレッドへの接続
接続すると %Net.Remote.GatewayOpens in a new tab オブジェクトが作成されます。
.NET ゲートウェイ・サーバが起動した後、.NET クラス・メソッドを呼び出す必要がある Caché セッションは、それぞれ .NET ゲートウェイ・サーバとの専用の接続を作成する必要があります。
-
Caché Basic または ObjectScript のコードで接続要求を送信します。
-
.NET ゲートウェイ・サーバは、この要求を受信するとワーカ・スレッドを開始します。このスレッドで .NET クラスのメソッドが続いて実行されます。
-
この .NET ゲートウェイ・ワーカ・スレッドと対応する Caché セッションとの間の接続は、明示的に切断されるまで、確立した状態に維持されます。
Gateway.%Connect() メソッド
%Connect() メソッドは、.NET ゲートウェイ・エンジンとの接続を確立します。以下の引数を使用できます。
引数 | 説明 |
---|---|
host | .NET ゲートウェイ・サーバを実行しているマシンを特定します。 |
port | プロキシ・クラスが .NET クラスと通信するポート番号。 |
namespace | Caché ネームスペース。 |
timeout | タイムアウトとなるまで待機する秒数。既定値は 5 です。 |
additionalClassPaths | オプション — 追加のクラス・パスを指定します。例えば、.NET ゲートウェイ経由でインポートするクラスを含む追加のアセンブリ DLL の名前を指定します。この引数の使用に関する詳細は、"%Import 引数" のセクションを参照してください。 |
サーバの切断と停止
.NET ゲートウェイ・ワーカ・スレッドを確立した Caché Basic または ObjectScript のコードでは、コードの終了前に明示的にそのスレッドを切断する必要があります。明示的に切断しないと、接続に割り当てられたポートが “使用中” のままになり、他の接続で使用できなくなります。ワーカ・スレッドは、%Net.Remote.GatewayOpens in a new tab オブジェクトの %Disconnect() メソッドを呼び出して切断することができます。
-
%Disconnect() メソッドは、.NET ゲートウェイ・サーバへの接続を切断します。
以下の %Net.Remote.ServiceOpens in a new tab メソッドは、ゲートウェイ・サーバを停止するために使用できます。
-
StopGateway() — このメソッドに渡されるゲートウェイ名で指定された .NET ゲートウェイ・サーバを停止します。
-
StopGatewayObject() — このメソッドに渡されるゲートウェイ定義オブジェクトで指定された .NET ゲートウェイ・サーバを停止します。
-
ShutdownGateway() — ゲートウェイ・サーバをシャットダウンします。
ゲートウェイの監視およびデバッグ
以下の %Net.Remote.ServiceOpens in a new tab メソッドは、ゲートウェイ・サーバを監視するために使用できます。
-
CheckMonitor() — ゲートウェイが監視されているかどうかをチェックし、モニタ・ジョブ番号を返します。
-
GatewayMonitor() — ゲートウェイ・サーバは、ゲートウェイ・サーバの HeartbeatInterval プロパティによって指定される時間間隔に従って PING 要求によって監視されます。1 時間に 1 回、「情報」型のレコードがログに記録されます。
-
StartMonitor() — ゲートウェイ・サーバの HeartbeatInterval プロパティに 0 より大きい値が設定されている場合、バックグラウンド・プロセスを終了してゲートウェイ・サーバを監視します。
-
StopMonitor() — 現在ゲートウェイ・サーバを監視しているプロセスを終了します。
-
PingGateway() — ゲートウェイ・サーバを "Ping" して稼動中かどうかチェックします。
エラーのチェック
.NET ゲートウェイには、以下のようなエラー・チェック機能が用意されています。
-
Caché プロキシ・メソッドの実行中にエラーが発生した場合、そのエラーの多くは、元の .NET メソッド自体または .NET ゲートウェイ・エンジンに起因する .NET の例外です。これが発生すると、エラーがトラップされます。
-
%Import() や %Connect() などの .NET ゲートウェイ API メソッドは、通常の Caché %StatusOpens in a new tab 変数を返します。
どちらの場合も、.NET クラスから返された最新のエラー値 (多くの場合、スローされた実際の .NET の例外) が、Caché のローカル変数 %objlasterror に記録されます。
以下のように、$system.OBJ.DisplayError を呼び出すことによって、エラー・メッセージの完全なテキストを取得できます。
Do $system.OBJ.DisplayError(%objlasterror)
%objlasterror は、(エラーを正しく報告しない開発コードなどでの) デバッグ・リソースとしてのみ使用してください。これにより、根本的な問題を診断し、問題のあるコードのエラー報告を修正できます。これは、このようなコードが、想定された状態でかつ報告できないエラーであるエラー・ステータスを使用するたびに、%objlasterror を削除するのに適しています。
トラブルシューティング
以下の推奨事項は、特定の状況で役立つ場合があります。
-
ログ機能の有効化
.NET ゲートウェイの使用中に問題が発生した場合は、ログ機能を常に有効にしておくことをお勧めします。これは、InterSystems のスタッフによる問題のトラブルシューティングにも役立ちます。ログ機能を有効にするには、.NET ゲートウェイの開始時に、使用しているオブジェクト・ゲートウェイ定義の logfile 引数を定義します (“ゲートウェイ・サーバのプロパティ設定” の章を参照してください)。
-
ターミナル・セッションの問題
デバッグやテストに .NET ゲートウェイを使用しているときに、ターミナル・セッションが使用できなくなるという問題やターミナル・ウィンドウでの書き込みエラーの問題が発生することがあります。原因として、適切な切断処理が行われずに、.NET ゲートウェイ接続が終了したことが考えられます。この場合、その接続に使用したポートが開いたままになっている可能性があります。
この状況になっていると考えられる場合は、ポートを閉じるために、ターミナル・プロンプトで以下のコマンドを入力します。
Close "|TCP|port"
この port には、閉じるポートの番号を指定します。
-
接続タイムアウトのエラー
クエリの書き込み時に、.NET アプリケーションでは、接続タイムアウト・エラーが原因で <ALARM> エラーが発生することがあります。既定のタイムアウト・パラメータは、以下のコマンドでオーバーライドできます (CMD コマンドがあることを前提としています)。
CMD.CommandTimeout=/NewTimeoutValue/
-
メモリ不足のエラー
.NET ゲートウェイを介して大量のデータを処理すると、System.OutOfMemoryException エラーが発生する場合があります。このような場合、GDI ハンドルの数を増やすと役立つことがあります。ハンドルの数を増やすには、以下のレジストリ・エントリを変更します。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota
既定値は 10000 (16 進数で 2710) です。この値を 20000 (16 進数で 4E20) に設定すると役立つことがあります。25000 や 30000 などのより大きな値を設定することもできます。
この内容に関する詳細は、以下の Microsoft MDSN の記事を参照してください。