4.2.4 .NETインタフェース定義から生成したクライアントスタブの使用例,およびXMLスキーマ例
クライアントスタブの使用例,およびXMLスキーマ例を次に示します。
この例で呼び出すSPP.NETのサービスメソッドの情報は次のとおりです。
-
サービスグループ名:GRP1
-
インタフェース名:MyCompany.IGyoumuA
-
呼び出すサービスメソッド名(サービス名):Service3
-
構成ファイル:指定あり(プロファイルID="TP1Host1")
なお,コメント中の(1),(2)などは「4.2.2 クライアントスタブの使用方法」の説明の番号に対応しています。
- 〈この項の構成〉
-
-
(7) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#,RPCデータのXMLマッピング機能を使用した場合)
-
(8) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#,RPCデータのXMLマッピング機能を使用した場合)
-
(9) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basic,RPCデータのXMLマッピング機能を使用した場合)
-
(10) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにnormalを指定した場合1)
-
(11) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにdatasetを指定した場合1)
-
(12) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにnormalを指定した場合2)
-
(13) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにdatasetを指定した場合2)
-
(14) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにdatasetを指定した場合3)
(1) .NETインタフェース定義の定義例(C#の場合)
using System; namespace MyCompany { public interface IGyoumuA { void Service1(string dataId, byte[] data); string[] Service2(string key); int Service3(int inCount, ref string[] ids); } }
(2) 入力データ用XMLスキーマ例(IGyoumuA_Service3_InData.xsd)
<?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="IGyoumuA_Service3_InData" type="IGyoumuA_Service3_InData" /> <xs:complexType name="IGyoumuA_Service3_InData"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="inCount" type="xs:int" /> <xs:element minOccurs="0" maxOccurs="1" name="ids" type="ArrayOfString" /> </xs:sequence> </xs:complexType> <xs:complexType name="ArrayOfString"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema>
(3) 出力データ用XMLスキーマ例(IGyoumuA_Service3_OutData.xsd)
<?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="IGyoumuA_Service3_OutData" type="IGyoumuA_Service3_OutData" /> <xs:complexType name="IGyoumuA_Service3_OutData"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="ids" type="ArrayOfString" /> <xs:element minOccurs="1" maxOccurs="1" name="returnValue" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:complexType name="ArrayOfString"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema>
(4) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#の場合)
using System; using Hitachi.OpenTP1; using Hitachi.OpenTP1.Connector; namespace MyCompany { public class MyForm1 : System.Web.UI.Page { … private void Button1_Click(object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.Application["tcmTP1Host1"]; // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 IGyoumuAStub server = new IGyoumuAStub(tc, "GRP1"); // (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS; // (4) 最大応答待ち時間 server.WatchTime = 180; // (5) 入力データの設定 string[] ids = new string[]{"data1","data2","data3"}; // (6) Service3を呼び出す int index = server.Service3(3, ref ids); // (7) 戻り値,出力パラメタの参照 this.textBox1.Text = ids[index]; } catch (TP1UserException exp) { // Service3()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // Service3()で予期しない例外発生 } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (Exception exp) { // 予期しない例外 } finally { // (8) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } } }
(5) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#の場合)
package MyCompany; import System.*; import Hitachi.OpenTP1.*; import Hitachi.OpenTP1.Client.*; public class MyForm1 extends System.Web.UI.Page { … private void Button1_Click(Object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.get_Application(). Get("tcmTP1Host1"); // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 IGyoumuAStub server = new IGyoumuAStub(tc, "GRP1"); // (4) RPC呼び出し形態 server.set_Flags(RpcInfo.DCNOFLAGS); // (4) 最大応答待ち時間 server.set_WatchTime(180); // (5) 入力データの設定 StringArrayHolder idsHolder = new StringArrayHolder(); // (5) 入力データの設定 String[] ids = new String[]{"data1","data2","data3"}; // (6) Service3を呼び出す int index; // (6) Service3を呼び出す index = server.Service3(3, idsHolder); // (7) 戻り値,出力パラメタの参照 this.textBox1.set_Text(idsHolder.get_Value()[index]); } catch (TP1UserException exp) { // Service3()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // Service3()で予期しない例外発生 } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (System.Exception exp) { // 予期しない例外 } finally { // (8) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } }
(6) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basicの場合)
Imports System Imports Hitachi.OpenTP1 Imports Hitachi.OpenTP1.Connector Namespace MyCompany Public Class MyForm1 Inherits System.Web.UI.Page … Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim tcm As TP1ConnectionManager Dim tc As TP1Connection Dim ret As Integer Dim ids() As String Dim index As Integer ' このボタンがクリックされたら ' OpenTP1<TP1Host1>のサービス要求を行う Try ' グローバル変数のアプリケーション状態から ' TP1ConnectionManagerを取得 ' (1) TP1ConnectionManagerクラスの生成 tcm = CType(Application("tcmTP1Host1"), _ TP1ConnectionManager) ' (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection() ' (3) クライアントスタブの生成 Dim server As IGyoumuAStub = New IGyoumuAStub(tc, "GRP1") ' (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS ' (4) 最大応答待ち時間 server.WatchTime = 180 ' (5) 入力データの設定 ids = New String(){"data1","data2","data3"} ' (6) Service3を呼び出す index = server.Service3(3, ids) ' (7) 戻り値,出力パラメタの参照 textBox1.Text = ids(index) Catch exp As TP1UserException ' Service3()からユーザ例外がスローされた Catch exp As TP1RemoteException ' Service3()で予期しない例外発生 Catch exp As TP1ConnectorException ' Connector .NETが検知したエラー Catch exp As TP1Exception ' その他スタブなどが検知したエラー Catch exp As Exception ' 予期しない例外 Finally If Not(tc Is Nothing) Then ' (8) コネクションをコネクションプールに戻す tc.Dispose() End If End Try End Sub End Class End Namespace
(7) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#,RPCデータのXMLマッピング機能を使用した場合)
using System; using System.Xml; using Hitachi.OpenTP1; using Hitachi.OpenTP1.Connector; namespace MyCompany { public class MyForm1 : System.Web.UI.Page { … private void Button1_Click(object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.Application["tcmTP1Host1"]; // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 IGyoumuAStub server = new IGyoumuAStub(tc, "GRP1"); // (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS; // (4) 最大応答待ち時間 server.WatchTime = 180; // (5) 入力データの設定 XmlDocument inDoc = GetInputData(); // (5) 入力データの設定 inDoc.SelectSingleNode("/IGyoumuA_Service3_InData/inCount" ).InnerText = "3"; // (6) Service3ByXmlを呼び出す XmlDocument outDoc = server.Service3ByXml(inDoc); // (7) 戻り値,出力パラメタの参照 String index = outDoc.SelectSingleNode( "/IGyoumuA_Service3_OutData/returnValue").InnerText; // (7) 戻り値,出力パラメタの参照 this.textBox1.Text = outDoc.SelectSingleNode( "/IGyoumuA_Service3_OutData/ids["+index+"]").InnerText; } catch (TP1UserException exp) { // Service3()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // Service3()で予期しない例外発生 } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (Exception exp) { // 予期しない例外 } finally { // (8) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } } }
(8) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#,RPCデータのXMLマッピング機能を使用した場合)
package MyCompany; import System.*; import System.Xml.*; import Hitachi.OpenTP1.*; import Hitachi.OpenTP1.Client.*; public class MyForm1 extends System.Web.UI.Page { … private void Button1_Click(Object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.get_Application(). Get("tcmTP1Host1"); // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 IGyoumuAStub server = new IGyoumuAStub(tc, "GRP1"); // (4) RPC呼び出し形態 server.set_Flags(RpcInfo.DCNOFLAGS); // (4) 最大応答待ち時間 server.set_WatchTime(180); // (5) 入力データの設定 XmlDocument inDoc = GetInputData(); // (5) 入力データの設定 inDoc.SelectSingleNode("/IGyoumuA_Service3_InData/inCount" ).set_InnerText("3"); // (6) Service3ByXmlを呼び出す XmlDocument outDoc = server.Service3ByXml(inDoc); // (7) 戻り値,出力パラメタの参照 String index = outDoc.SelectSingleNode( "/IGyoumuA_Service3_OutData/returnValue").get_InnerText(); // (7) 戻り値,出力パラメタの参照 this.textBox1.set_Text( outDoc.SelectSingleNode( "/IGyoumuA_Service3_OutData/ids["+index+"]" ).get_InnerText()); } catch (TP1UserException exp) { // Service3()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // Service3()で予期しない例外発生 } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (System.Exception exp) { // 予期しない例外 } finally { // (8) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } }
(9) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basic,RPCデータのXMLマッピング機能を使用した場合)
Imports System Imports System.Xml Imports Hitachi.OpenTP1 Imports Hitachi.OpenTP1.Connector Namespace MyCompany Public Class MyForm1 Inherits System.Web.UI.Page … Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim tcm As TP1ConnectionManager Dim tc As TP1Connection Dim ret As Integer Dim ids() As String Dim index As String Dim inDoc, outDoc As XmlDocument ' このボタンがクリックされたら ' OpenTP1<TP1Host1>のサービス要求を行う Try ' グローバル変数のアプリケーション状態から ' TP1ConnectionManagerを取得 ' (1) TP1ConnectionManagerクラスの生成 tcm = CType(Application("tcmTP1Host1"), _ TP1ConnectionManager) ' (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection() ' (3) クライアントスタブの生成 Dim server As IGyoumuAStub = New IGyoumuAStub(tc, "GRP1") ' (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS ' (4) 最大応答待ち時間 server.WatchTime = 180 ' (5) 入力データの設定 inDoc = GetInputData() ' (5) 入力データの設定 inDoc.SelectSingleNode( _ "/IGyoumuA_Service3_InData/inCount").InnerText = "3" ' (6) Service3ByXmlを呼び出す outDoc = server.Service3ByXml(inDoc) ' (7) 戻り値,出力パラメタの参照 index = outDoc.SelectSingleNode( _ "/IGyoumuA_Service3_OutData/returnValue").InnerText ' (7) 戻り値,出力パラメタの参照 this.textBox1.Text = outDoc.SelectSingleNode( _ "/IGyoumuA_Service3_OutData/ids["+index+"]").InnerText Catch exp As TP1UserException ' Service3()からユーザ例外がスローされた Catch exp As TP1RemoteException ' Service3()で予期しない例外発生 Catch exp As TP1ConnectorException ' Connector .NETが検知したエラー Catch exp As TP1Exception ' その他スタブなどが検知したエラー Catch exp As Exception ' 予期しない例外 Finally If Not(tc Is Nothing) Then ' (8) コネクションをコネクションプールに戻す tc.Dispose() End If End Try End Sub End Class End Namespace
(10) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにnormalを指定した場合1)
(11) XMLスキーマ例(クライアントスタブ生成コマンド(if2cstub)の-Xオプションにdatasetを指定した場合1)
- 注※
-
親要素であるcomplexType要素のname属性の値は付加しないで,returnValueだけが指定されます。