OpenVMS Alpha
オペレーティング・システム
コネクティビティ開発者ガイド


前へ 次へ 目次 索引



付録 B
トラブルシューティング

B.1 RPC のトラブルシューティング

同時に NTLM 認証を数多く行う場合は,次のエラーが発生する可能性があります。同時 NTLM 認証の数にはいくつかの要素が影響しますが,これらのエラーが発生する可能性が最も高いのは,ネットワークが混雑している場合か,RPC アプリケーション・サーバがタイムリーに要求に応答しない場合です。エラーは標準の RPC アプリケーション戻り値として返されます。

表 B-1 は,考えられる原因と対処方法を示しています。

表 B-1 RPC エラー
エラー 原因/対処方法
RPC_S_CONNECTION_REJECTED このエラーは,DECnet Phase IV または DECnet Phase V をトランスポートとして使用し,他の DECnet クライアントにサービスを提供するサーバの負荷が非常に高いときに,クライアント・アプリケーションで例外として発生します。

クライアント RPC が新規作成されたソケットに対してタイム・バインドを実行し,ソケットがエラー 61 (connection refused) を返すと,このエラーが返されます。

対処方法:

  1. DECnet リソース・クォータの値を大きくします。

  2. クライアント RPC プログラムを強化して例外をキャッチし,RPC を再実行するか,または別のサーバを選択するようにします。

RPC_S_CONNECTION_TIMED_OUT このエラーは,TCP または DECnet をトランスポートとして使用し,サーバの負荷が非常に高いときに,クライアント・アプリケーションで例外として発生します。

クライアント RPC が新規作成されたソケットに対してタイム・バインドを実行し,サーバが接続を受け付けるか,または拒否するまでに非常に長い時間がかかる場合は,このエラーが返されます。

対処方法:

  1. ソケット・タイムアウトが発生するまでの待ち時間を長くするように, TCP または DECnet を構成します。

  2. RPC クライアント・アプリケーションを強化して,このソケット・エラーを取得したときに, rpc_mgmt_set_com_timeout() を呼び出し, RPC 実行時ルーチンに対して再実行するように要求します。

  3. 例外をキャッチし,RPC を再実行するか,または別のサーバを選択するように,クライアント RPC プログラムを変更します。

RPC_S_ASSOC_SHUTDOWN このエラーは,TCP または DECnet をトランスポートとして使用し,クライアントの負荷が非常に高いときに (通常,クライアントが RPC サーバでもある場合),クライアント・アプリケーションで例外として発生します。

RPC サーバが RPC_BIND パケットをクライアントから受信し,サーバが RPC_BIND_ACK パケットをクライアントに返送した後,サーバは 12 秒以内に REQUEST パケットを受信するものと解釈します。クライアントが 12 秒以内に REQUEST パケットを送信しなかった場合は,RPC サーバは関連付けを削除し, SHUTDOWN パケットをクライアントに送信します。クライアント RPC 実行時ルーチンは例外を RPC アプリケーションに通知します。

このエラーは,クライアント RPC アプリケーションが RPC サーバとしても機能し,RPC サーバの負荷がすでに非常に高くなっているときに発生する可能性があります。

対処方法:

  1. 例外をキャッチし,RPC を再実行するか,または別のサーバを選択するように,クライアント RPC プログラムを実装します。

RPC_S_COMM_FAILURE

このエラーは,DG (UDP) をトランスポートとして使用し,RPC サーバの負荷が非常に高いときに,クライアント・アプリケーションで例外として発生します。

RPC クライアントは REQUEST パケットをサーバに送信します。クライアントが 30 秒以内にサーバから WORKING パケット応答を受信しないと,クライアントは PING パケットをサーバに送信して,サーバがまだアクティブであり,クライアントの要求を処理しているかどうかを判断します。RPC サーバの負荷が非常に高い場合は,クライアントでタイムアウトが発生する前に,サーバが WORKING パケットをクライアントに返すことができないことがあります。

対処方法:

  1. RPC クライアント・アプリケーションは rpc_mgmt_set_com_timeout() を呼び出して,RPC 実行時ルーチンに対して,タイムアウトが発生する前に 30 秒以上待つように要求できます。

  2. 例外をキャッチし,RPC を再実行するか,または別のサーバを選択するように,クライアント RPC プログラムを実装します。

B.2 ACME サーバのトラブルシューティング

ACME サーバで発生した問題を解決するには,次の操作を行います。

  1. ACME_SERVER プロセスが稼動しているかどうかを確認し ( SHOW SERVER ACMEコマンドを使用), MSV1_0 ACME エージェントと Advanced Server for OpenVMS プロセスの間に接続が確立されているかどうかを確認します。

  2. 接続が確立されていない場合は,PWRK$ACME_SERVER 論理名に, Advanced Server for OpenVMS プロセスを実行しているクラスタ内のシステムの SCS ノード名が含まれているかどうかを確認します。

  3. PWRK$ACME_SERVER 論理名が正しく定義されている場合は,指定されたシステムで Advanced Server for OpenVMS プロセスが稼動しているかどうかを確認します ( PWRK$LMSRVプロセスを検索します)。

  4. 認証が失敗した場合は,次のことを確認します。

B.3 DCOM$RPCSS プロセスのトラブルシューティング

OpenVMS システムで COM for OpenVMS アプリケーションを実行するには, DCOM$RPCSS プロセスを稼動していなければなりません。 DCOM$STARTUP.COM コマンド・ファイルはこのプロセスを自動的に起動します。 COM for OpenVMS アプリケーションの実行で問題が発生した場合は,このプロセスが稼動しているかどうかを確認してください。次のコマンドを使用します。


  $ SHOW SYSTEM 

プロセスが初期化中の場合は,プロセス名は DCOM$STARTUP-** になります。プロセスが正常な動作状態の場合は,プロセス名は DCOM$RPCSS になります。

DCOM$RPCSS プロセスからエラー・メッセージが記録されていないかどうか, SYS$MANAGER:DCOM$RPCSS.OUT ログ・ファイルを確認してください。次のメッセージが記録されている可能性があります。


付録 C
クックブックの例: OpenVMS でのサンプル・アプリケーションの作成

注意

SAMPLE1DISPATCH_SAMPLE1は, Microsoft Press が出版している Dale Rogerson 著『Inside COM』から抜粋したものです。

C.1 COM の例 (サンプル 1)

このサンプルでは,COM クライアントとサーバを実装します。コンポーネントは IXIYという 2 つのインタフェースを提供します。また,クライアントはコンポーネントに対して 3 番目のインタフェース IZを問い合わせていますが,これはコンポーネントが提供していないインタフェースです。

このサンプルでは,2 つの OpenVMS システム間の接続,2 つの Windows NT システム間の接続,OpenVMS システムと Windows NT システムの間の接続を示しています。

注意

OpenVMS でアプリケーションを作成する前に,NTA$LOGON を実行し, Windows NT 資格情報を取得する必要があります。詳細については, 第 12.2 節 を参照してください。

C.1.1 OpenVMS での手順

ここでは,OpenVMS システムでアプリケーションを構築する方法について説明します。

C.1.1.1 OpenVMS でのアプリケーションの構築

ファイルを DCOMexamples ディレクトリからローカル・ディレクトリにコピーします。次の例を参照してください。


   $ set default mydisk:[mydirectory] 
   $ copy dcom$examples:[sample1]*.* [] 

アプリケーションを構築するには,次のコマンド・プロシージャを実行します。


   $ @build_sample1 

MMS がある場合は,次に示すように,インクルードされた説明ファイルを使用できます。


   $  MMS/DESCRIPTION=BUILD_SAMPLE1.MMS 

BUILDファイルは,プロセス内サーバとプロセス外サーバの両方を構築し,登録します。

C.1.1.2 OpenVMS でのアプリケーションの登録

ビルド・プロシージャは, CMPNT$SHR.EXECMPNT.EXEの両方を自動的に登録します。コンポーネントを手動で登録するには,次の操作を行います。

C.1.1.3 プロセス外サーバとしての OpenVMS でのアプリケーションの実行

コンポーネントがプロセス外サーバであるサンプルを実行するには, CMPNT.EXEを実行します。コンポーネントから Server: Waitingというメッセージが表示されたら,クライアントを別のウィンドウまたは端末セッションで実行します。

クライアントは次のメッセージを表示します。


  To which server do you want to connect? 
   1) In-Process Server 
   2) Out-of-Process Server 
   : 

2と入力して,プロセス外サーバを選択します。

C.1.1.4 OpenVMS でのアプリケーションの実行とリモート・サーバの指定

リモート・マシン (またはサーバ・システム) として指定したシステムで CMPNT.EXEを実行します。リモート・システムは Windows NT システムでもかまいません。コンポーネントから Server: Waitingメッセージが返された場合は,ローカル・マシン (またはクライアント・システム) として指定したシステムでクライアントを実行します。次の例を参照してください。


   $ client :== $path-nameCLIENT.EXE 
   $ client remote-system-name
   2 
   $ 

クライアントは次のメッセージを表示します。


  To which server do you want to connect? 
   1) In-Process Server 
   2) Out-of-Process Server 
   : 

2と入力して,リモート・サーバ,つまりプロセス外サーバの実行を選択します。

C.1.1.5 プロセス内サーバとしての OpenVMS でのアプリケーションの実行

コンポーネントがプロセス内サーバであるサンプルを実行するには,クライアントだけを実行します。次の例を参照してください。


   For InProc: 
   $ client 
   1 
   $ 

クライアントは次のメッセージを表示します。


  To which server do you want to connect? 
   1) In-Process Server 
   2) Out-of-Process Server 
   : 

1と入力して,プロセス内サーバを選択します。

C.1.2 Windows NT の場合の手順

ここでは,Windows NT システムでアプリケーションを構築する方法について説明します。

C.1.2.1 Windows NT でのアプリケーションの構築

README-SAMPLE1.TXTファイルと次のファイルを COM examples ディレクトリから Windows NT システムにコピーします。


CLIENT.CXX 
CMPNT.CXX 
CMPNT.DEF 
GUIDS.CXX 
MAKE-ONE. 
MAKEFILE.BAT 
PROXY.DEF 
REGISTRY.CXX 
REGISTRY.H 
SERVER.IDL 

MAKEFILE.BATファイルを使用して,サンプルを構築します。次の例を参照してください。


   > MAKEFILE 

Makefile はプロセス内サーバとプロセス外サーバの両方を構築し,登録します。


前へ 次へ 目次 索引