You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

[ |../../index.htm#lansa/vlwebeng03_0105.htm]
現在地:

20.2 SrvRoutine のグローバル・スコープとローカル・スコープ

SrvRoutine を定義する場所は非常に大切です。同じ SrvRoutine を非同期に複数回実行する場合、つまり最初の呼び出しが完了する前に 2 番目の呼び出しを実行する場合は、特に重要です。
この理由から、一般的には SrvRoutine の定義にはローカル・スコープの使用が推奨されています。
ローカル・スコープ
次の例では、SrvRoutine はメソッド・ルーチン内に定義されています。
 
Mthroutine Name(Load)

  • サービス・インスタンスの定義 Define_Com Class(#ServerModule.GetEmployees) Name(#GetEmployees)    * 非同期に実行 #GetEmployees.ExecuteAsync( #List)
       Evtroutine Handling(#GetEmployees.completed)
        * 処理完了
       Endroutine
     
       Evtroutine Handling(#GetEmployees.Failed)
        * 処理エラー
       Endroutine
    Endroutine
    このメソッドが呼び出される度に、新しい実行インスタンスが作成され、その結果 SrvRoutine の新しいインスタンスも作成されます。すべての処理が完了するまで、メソッド・ルーチンとその中の変数はすべてメモリに残されます。
    グローバル・スコープ
    次の例では、Srvroutine はメソッドの外に定義されています。
     
  • サービス・インスタンスの定義 Define_Com Class(#ServerModule.GetEmployees) Name(#GetEmployees)
    Mthroutine Name(Load)    * 非同期に実行    #GetEmployees.ExecuteAsync( #List) Endroutine
    Evtroutine Handling(#GetEmployees.completed)
       * 処理完了
    Endroutine
     
    Evtroutine Handling(#GetEmployees.Failed)
       * 処理エラー
    Endroutine
     
    つまり、ルーチンのインスタンスが 1 つだけ存在するということです。このルーチンを実行する複数の要求 (異なるパラメータ値による実行など) は、最終的に Web サーバーへの送信が複数回行われ、その結果、複数の Completed イベントが起動されることとなります。ですが、ルーチンのインスタンスは 1 つのみなので、複数の実行の違いを区別することができません。
    [ |../../index.htm#lansa/vlwebeng03_0105.htm]
  • No labels