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だけが指定されます。