Host-Initiated 処理で永続的な接続を使用する方法

永続的な接続は、特定の呼び出しの期間を過ぎても開いたままの接続です。 アプリケーションは各呼び出しで接続を再作成する必要がないため、永続的な接続を使用して、ホストによって開始されるアプリケーションの効率を向上させることができます。 ホストによって開始される処理 (HIP) との永続的な接続を使用するアプリケーションは、Windows-Initiated 処理 (WIP) と同じ方法で動作します。 もちろん、違いは、メインフレームが接続を開始して終了し、Windows アプリケーションがメインフレームの要求に応答する点です。

Note

Host Integration Server では、WIP と同じ HIP プログラミング環境の多くがサポートされています。 例外は IMS Connect、分散プログラム呼び出し (DPC)、SNALink です。これは HIP 永続接続ではサポートされていません。

HIP で永続的な接続を使用する

  1. メインフレームから Windows アプリケーションとの呼び出しを受け取り、接続が作成されたことを示します。

    永続接続を要求するのはメインフレーム アプリケーションの責任です。

  2. Windows アプリケーションに関連する方法で要求に対応させる。

    永続的な接続を使用するためにアプリケーションで実行する必要がある具体的な操作は何もありません。接続の作成と終了は、メインフレーム アプリケーションの責任です。

  3. 必要に応じて、HIPServerUserContext の新しいインスタンスを作成して、接続の状態を照会できます。

    新しいインスタンスは、関連する接続のコンテキスト情報を使用して自動的に作成されます。 HIPServerUserConext を使用すると、メインフレームが作成した接続の種類を特定し、それに応じて対応できます。

次のコードは、SDK の CICS サンプル アプリケーションから取得されます。 このサンプルでは、サーバー オブジェクトの CONNTYPE を使用して、さまざまなアクションを実行します。

decimal GetAccountBalance(object[] contextArray)  
        {  
            decimal ReturnBalance = 0.0m;  
            string ConnType;  
            object contextValue;  
  
            _TIServerContext.ReadContext("CONNTYPE", out contextValue, ref contextArray);  
  
            if (contextValue == null)  
                ReturnBalance = 123.45m;  
            else  
            {  
                ConnType = contextValue.ToString();  
                ConnType.ToUpper();  
                switch (ConnType)  
                {  
                    case "OPEN":  
 // Set the initial value of the Account Balance  
 // and save it in a global varaible and return it.  
                        ReturnBalance = 123.45m;  
                        _AccountBalance = ReturnBalance;  
                        break;  
  
                    case "USE":  
 // Increase the value of the global Account Balance  
 // varaible and return its value. Save this new value  
 // in the global variable for later use  
                        _AccountBalance += 100;  
                        ReturnBalance = _AccountBalance;  
                        break;  
  
                    case "CLOSE":  
 // Increase the value of the global Account Balance  
 // variable and return the new value. Set the global variable  
 // to zero because the "CLOSE" call indicates that we are   
 // done with it.  
                        ReturnBalance = _AccountBalance + 150;  
                        _AccountBalance = 0.0m;  
                        break;  
  
                    case "UNKNOWN":  
                    default:  
                        _AccountBalance = 0.0m;  
                        ReturnBalance = 123.45m;  
                        break;  
                }  
            }  
  
            return ReturnBalance;  
        }  

このコード サンプルでは、グローバル変数を使用して情報を格納します。 コンテキスト オブジェクト自体を使用して情報を格納することもできます。 ここでは示しませんが、コンテキスト オブジェクトを使用して情報を Windows アプリケーションに渡すことができます。

参照

永続的な接続