4.4.3 .NETインタフェース定義から生成したクライアントスタブの使用例

クライアントスタブの使用例を次に示します。

この例で呼び出すSPP.NETのサービスメソッドの情報は次のとおりです。

なお,コメント中の(1),(2)などは「4.4.2 クライアントスタブの使用方法」の説明の番号に対応しています。

<この項の構成>
(1) .NETインタフェース定義の定義例(C#の場合)
(2) クライアントスタブの使用例(SPP.NET,C#の場合)
(3) クライアントスタブの使用例(SPP.NET,J#の場合)
(4) クライアントスタブの使用例(SPP.NET,Visual Basicの場合)
(5) クライアントスタブの使用例(SUP.NET,C#の場合)
(6) クライアントスタブの使用例(SUP.NET,J#の場合)
(7) クライアントスタブの使用例(SUP.NET,Visual Basicの場合)

(1) .NETインタフェース定義の定義例(C#の場合)

namespace MyCompany
{
 using System;

 public interface IGyoumuA
 {
   void Service1(string dataId, byte[] data);
   string[] Service2(string key);
   int Service3(int inCount, ref string[] ids);
 }
}

(2) クライアントスタブの使用例(SPP.NET,C#の場合)

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class CallerSampleImpl : SPPBase, ICallerSample
 {
   private IGyoumuAStub server = null;
   …
   public override void InitializeSPP()
   {
     // (1) クライアントスタブの生成
     server = new IGyoumuAStub("GRP1");
   }

   public override void FinalizeSPP()
   {
     server = null;
   }

   [TP1RpcMethod]
   public int CallService3()
   {
     try {
       string[] ids =
         // (2) 入力データの設定
         new string[3]{"data1", "data2", "data3"};
       // (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS;
       // (4) service3を呼び出す
       int ret = server.Service3(3, ref ids);
       return ret;
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
   }
 }
}

(3) クライアントスタブの使用例(SPP.NET,J#の場合)

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class CallerSampleImpl
      extends SPPBase implements ICallerSample
{
   private IGyoumuAStub server = null;
   …
   public void InitializeSPP() throws TP1ServerException
   {
     // (1) クライアントスタブの生成
     server = new IGyoumuAStub("GRP1");
   }
   public void FinalizeSPP()
   {
     server = null;
   }
   /** @attribute TP1RpcMethod() */
   public int CallService3()
   {
     try {
       String[] ids =
         // (2) 入力データの設定
         new String[]{"data1", "data2", "data3"};
       // (2) 入力データの設定
       StringArrayHolder idsHolder = new StringArrayHolder();
       // (2) 入力データの設定
       idsHolder.set_Value(ids);
       // (3) 同期応答型RPCに設定
       server.set_Flags(TP1ServerFlags.DCNOFLAGS);
       // (4) service3を呼び出す
       int ret = server.Service3(3, idsHolder);
       return ret;
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
   }
}

(4) クライアントスタブの使用例(SPP.NET,Visual Basicの場合)

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
 Public Class CallerSampleImpl
   Inherits SPPBase
   Implements ICallerSample
   Private server As IGyoumuAStub
   …
   Public Overrides Sub InitializeSPP()
     ' (1) クライアントスタブの生成
     server = New IGyoumuStub("GRP1")
   End Sub

   Public Overrides Sub FinalizeSPP()
     server = Nothing
   End Sub

   <TP1RpcMethod()> _
   Public Function CallService3() As Integer _
        Implements ICallerSample.CallerService3
     Try
       Dim ret As Integer
       Dim ids() As String = _
         ' (2) 入力データの設定
         New String(){"data1","data2","data3"}
       ' (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS
       ' (4) service3を呼び出す
       ret = server.Service3(3, ids)
     Catch exp As TP1UserException
     ' Service3()からユーザ例外がスローされた
     Catch exp As TP1RemoteException
     ' Service3()で予期しない例外発生
     Catch exp As TP1ServerException
     ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
     ' その他OpenTP1が検知したエラー
     Catch exp As Exception
     ' 予期しない例外
     End Try
   End Function
 End Class
End Namespace

(5) クライアントスタブの使用例(SUP.NET,C#の場合)

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class CallerSample
 {
 public static void Main(string[] args)
   {
     try {
       IGyoumuAStub server =
         // (1) クライアントスタブの生成
         new IGyoumuAStub("GRP1");
       Rpc.Open();         // RPCオープン
       Adm.Complete();     // SUP.NET開始処理完了通知

       // (2) 入力データの設定
       string[] ids = new string[]{"data1","data2","data3"};
       // (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS;
       // (4) service3を呼び出す
       int ret = server.Service3(3, ref ids);

       Rpc.Close();        // RPCクローズ
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException e) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
 }
}

(6) クライアントスタブの使用例(SUP.NET,J#の場合)

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class CallerSample
{
 public void main(String args[])
   {
    try {
     int ret;
       // (1) クライアントスタブの生成
       IGyoumuAStub server = new IGyoumuAStub("GRP1");
       Rpc.Open();                // RPCオープン
       Adm.Complete();            // SUP.NET開始処理完了通知

       // (2) 入力データの設定
       StringArrayHolder idsHolder = new StringArrayHolder();
       // (2) 入力データの設定
       String[] ids = new String[]{"data1","data2","data3"};
       // (2) 入力データの設定
       idsHolder.set_Value(ids);
       // (3) 同期応答型RPCに設定
       server.set_Flags(TP1ServerFlags.DCNOFLAGS);
       // (4) service3を呼び出す
       ret = server.Service3(3, idsHolder);

       Rpc.Close();               // RPCクローズ
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
   }
}

(7) クライアントスタブの使用例(SUP.NET,Visual Basicの場合)

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
Public Class CallerSample

   Public Shared Sub Main(ByVal args() As String)
     Dim ret As Integer
     Try
       ' (1) クライアントスタブの生成
       Dim server As IGyoumuAStub = New IGyoumuAStub("GRP1")
       Rpc.Open()                  ' RPCオープン
       Adm.Complete()              ' SUP.NET開始処理完了通知

       Dim ids() As String = _
         ' (2) 入力データの設定
         New String(){"data1","data2","data3"}
       ' (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS
       ' (4) service3を呼び出す
       ret = server.Service3(3, ids)

       Rpc.Close()                 ' RPCクローズ
     Catch exp As TP1UserException
     ' Service3()からユーザ例外がスローされた
     Catch exp As TP1RemoteException
     ' Service3()で予期しない例外発生
     Catch exp As TP1ServerException
     ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
     ' その他OpenTP1が検知したエラー
     Catch exp As Exception
     ' 予期しない例外
     End Try
   End Sub
 End Class
End Namespace