OpenTP1 Version 7

分散トランザクション処理機能

TP1/Connector for .NET Framework 使用の手引

解説・手引・文法・操作書

3000-3-D69-30

目　　次

前書き

変更内容

はじめに

1.　機能

1.1　リモートプロシジャコール（RPC）

1.1.1　RPCの形態によるRPCインタフェースの使用可否

1.1.2　RPC送受信メッセージの最大長拡張機能

1.1.3　RPCデータのXMLマッピング機能

1.2　トランザクション制御機能

1.2.1　トランザクションの種類

1.2.2　ローカルトランザクションの概要

1.2.3　ローカルトランザクション制御機能を使用する場合の設定

1.2.4　ローカルトランザクションの開始と同期点取得

1.2.5　ローカルトランザクションの同期点取得

1.2.6　障害発生時のローカルトランザクションの同期点を検証する方法

1.2.7　分散トランザクションの概要

1.2.8　分散トランザクションの単一フェーズコミット最適化

1.2.9　未決着トランザクションの完了処理

1.2.10　分散トランザクションのトランザクションリカバリサービス

1.2.11　MSDTC連携機能を使用するための作業の流れ

1.2.12　MSDTC連携機能を使用する場合のTP1/Serverの設定

1.2.13　分散トランザクションのアプリケーションの作成

1.2.14　ノード識別子の決定

1.2.15　MSDTC連携機能を使用する場合の構成定義での指定

1.2.16　トランザクションリカバリサービスの開始

1.2.17　MSDTC連携機能を使用している場合の障害発生時の運用

1.3　TCP/IP通信機能

1.3.1　通信形態

1.3.2　TCP/IP通信機能を使用する場合に関連する定義

1.3.3　物理コネクションの管理

1.3.4　TCP/IP通信機能を使用する場合の注意事項

1.4　コネクションプーリング機能

1.4.1　コネクションの生成とプーリング

1.4.2　構成定義での指定

1.4.3　コネクションプーリング機能を使用したアプリケーションの実行

1.5　バッファプーリング機能

1.5.1　バッファプールとメッセージバッファ

1.5.2　構成定義での指定

1.5.3　バッファの取得と解放

1.5.4　インデクスドレコード使用時のバッファの取得と解放

1.5.5　クライアントスタブ使用時のバッファの取得と解放

1.5.6　バッファプーリング機能を使用したアプリケーションの実行

1.5.7　バッファサイズの見積もり方法

1.6　TSP自動生成機能

1.6.1　TSP自動生成機能の概要

1.6.2　TSP自動生成機能の運用

1.6.3　TSPの動作設定

1.6.4　ASP.NET XML Webサービスの動作設定

1.6.5　パラメタの対応づけ規則

1.7　リソース監視機能

1.7.1　リソース不足を通知する警告メッセージの出力

1.7.2　パフォーマンスカウンタへのリソース使用状況の出力

1.8　接続障害軽減機能

1.8.1　接続障害軽減機能の概要

1.8.2　構成定義での指定

1.8.3　接続障害の検知と復旧確認

1.8.4　接続障害軽減機能を使用する場合の注意事項

1.9　WCF連携機能

1.9.1　WCF連携機能の機能概要

1.9.2　TP1IntegrationBindingのサービスコントラクトおよびプロキシクラス

1.9.3　WCF連携機能を使用したUAPの開発と実行

1.9.4　WCFクライアントアプリケーションのコーディング方法

1.9.5　接続先OepnTP1のサービスの位置情報の指定形式

1.9.6　サービス要求の最大応答待ち時間の設定方法

1.9.7　アプリケーション構成ファイルの設定方法

1.9.8　WCF連携機能のサンプルプログラムの使用方法

1.10　環境設定

1.10.1　インストール後の環境設定

1.10.2　セキュリティポリシーの設定

1.10.3　メッセージの出力先

2.　構成定義

構成ファイルの形式

hitachi.opentp1.connector

common

profile

client

connection

occupation

tcpip

log

buffer

largestBufferPool

bufferPool

option

perfCounter

distributedTransaction

recoveryService

定義例

3.　UAPの作成と実行

3.1　OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義

3.1.1　.NETインタフェース定義

3.1.2　サービス定義

3.2　.NETインタフェース定義を使用したSPP.NETの呼び出し方法

3.2.1　クライアントスタブの生成

3.2.2　クライアントスタブの使用方法

3.2.3　XMLスキーマの定義方法

3.2.4　.NETインタフェース定義から生成したクライアントスタブの使用例，およびXMLスキーマ例

3.3　サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

3.3.1　クライアントスタブの生成

3.3.2　クライアントスタブの使用方法

3.3.3　XMLスキーマの定義方法

3.3.4　サービス定義から生成したクライアントスタブの使用例，およびXMLスキーマ例

3.4　インデクスドレコードを使用したSPP.NETまたはSPPの呼び出し方法

3.4.1　インデクスドレコードを使用する場合のメソッドの発行手順

3.4.2　インデクスドレコードを使用してRPC要求をする場合のコーディング例

3.4.3　インデクスドレコードとバッファプーリング機能を使用する場合のメソッド発行手順

3.4.4　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例

3.5　トランザクション制御機能の使用方法

3.6　TCP/IP通信機能の使用方法

3.6.1　TCP/IP通信機能を使用する場合のメソッド発行手順

3.6.2　TCP/IP通信機能を使用する場合のコーディング例（C#の場合）

3.6.3　TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順

3.6.4　TCP/IP通信機能とバッファプーリング機能を使用する場合のコーディング例（C#の場合）

3.7　UAP作成時の注意事項

3.7.1　アプリケーションプログラムの実行環境と留意点

3.7.2　例外の捕捉とエラーの判定

3.7.3　COBOL言語で作成する場合の注意事項

3.7.4　クラスライブラリを使用する場合の注意事項

3.8　サンプルプログラムの使用方法

3.8.1　ディレクトリ構成

3.8.2　サンプルプログラムのビルド方法

3.8.3　サンプルプログラムの実行手順

4.　運用コマンド

運用コマンドの種類

if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））

if2tsp（TSP生成コマンド（.NETインタフェース定義用））

spp2cstub（クライアントスタブ生成コマンド（サービス定義用））

spp2tsp（TSP生成コマンド（サービス定義用））

cnnnidgen（MSDTC連携機能で使用するノード識別子生成コマンド）

cnntrsls（トランザクションリカバリサービスの状態表示コマンド）

5.　クラスリファレンス

Connector .NETで利用できるクラス

IndexedRecord

MessageBuffer

RpcInfo

TcnIllegalArgumentException

TcnIllegalStateException

TcnNotUsedException

TcpipConnection

TcpipInfo

TP1Connection

TP1ConnectionManager

TP1ConnectorError

TP1ConnectorException

TP1IntegrationBehavior

TP1IntegrationBinding

TP1RpcClient

6.　障害運用

6.1　障害の種類と対処方法

6.2　障害時に取得する情報

付録

付録A　DCCM3と接続する場合の注意事項

付録B　Connector .NETで利用できるクラスのフィールド

付録C　バージョンアップ時の変更点

付録C.1　07-03での変更点

付録C.2　07-02での変更点

付録C.3　07-01での変更点

付録C.4　07-00での変更点

付録D　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2006, 2009, Hitachi, Ltd.

前書き

■ 対象製品

R-15451-21　 uCosminexus TP1/Connector for .NET Framework　 07-03（適用OS：Windows 2000，Windows XP，Windows Server 2003，Windows Vista，Windows Server 2008）

このプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
この製品は，ISO9001およびTickITの認証を受けた品質マネジメントシステムで開発されました。

■ 輸出時の注意

本製品を輸出される場合には，外国為替および外国貿易法ならびに米国の輸出管理関連法規などの規制をご確認の上，必要な手続きをお取りください。
なお，ご不明な場合は，弊社担当営業にお問い合わせください。

■ 商標類

Internet Explorerは，米国Microsoft Corporationの米国及びその他の国における登録商標または商標です。
Microsoftは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
MSDNは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
ORACLEは，米国Oracle Corporation の登録商標です。
SOAP（Simple Object Access Protocol）は，分散ネットワーク環境においてXMLベースの情報を交換するための通信プロトコルの名称です。
Visual Basicは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Visual Studioは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windowsは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windows Serverは，米国Microsoft Corporationの米国及びその他の国における登録商標です。
Windows Vistaは，米国Microsoft Corporationの米国及びその他の国における登録商標です。
X/Openは，X/Open Company Limited の英国ならびに他の国における登録商標です。

本書には，X/Openの許諾に基づき X/Open CAE Specification System Interfaces and Headers，Issue4，（C202 ISBN 1-872630-47-2）Copyright（C）July 1992， X/Open Company Limited の内容が含まれています;
なお，その一部は IEEE Std 1003.1-1990，（C）1990 Institute of Electrical and Electronics Engineers，Inc.及び IEEE std 1003.2/D12，（C）1992 Institute of Electrical and Electronics Engineers，Inc.を基にしています。

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，X/Openの許諾に基づき X/Open X/Open Preliminary Specification Distributed Transaction Processing：The TxRPC Specification（P305 ISBN 1-85912-000-8）Copyright（C）July 1993， X/Open Company Limited の内容が含まれています;

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，Open Software Foundation，Inc. が著作権を有する内容が含まれています。
This document and the software described herein are furnished under a license，and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. Title to and ownership of the document and software remain with OSF or its licensors.

■ 発行

2006年 6月 （第1版） 3000-3-D69
2009年 2月 （第4版） 3000-3-D69-30

■ 著作権

All Rights Reserved. Copyright (C) 2006, 2009, Hitachi, Ltd.

変更内容

変更内容（3000-3-D69-30） uCosminexus TP1/Connector for .NET Framework　07-03

追加・変更内容
変更個所

Windows Server 2008に対応した。
1.2.7(3)(a)，1.9.1(1)(a)，3.8.2(1)

.NET Framework v3.5に対応した。
1.2.7(3)(b)，1.9，1.9.1(1)(b)

Visual Studio 2008に対応した。
これに伴い，Visual Studio 2008では，開発言語としてJ#を使用できない旨を記載した。
1.6.1(3)(a)，3.1.1(1)(a)，3.2，3.3，3.4

開発言語として，COBOL言語に対応した。
これに伴い，次のクラスの説明にCOBOL言語の場合の説明を追記した。

IndexedRecord

MessageBuffer

RpcInfo

TcpipConnection

TcpipInfo

TP1Connection

TP1ConnectionManager

TP1ConnectorError

3.1.1(1)(a)，3.2，3.3，3.4，3.4.2(6)，3.4.4(2)，3.7.3，3.8.1，3.8.2(1)，3.8.2(2)，3.8.3(1)，3.8.3(4)，5.　IndexedRecord，5.　MessageBuffer，5.　RpcInfo，5.　TcpipConnection，5.　TcpipInfo，5.　TP1Connection，5.　TP1ConnectionManager，5.　TP1ConnectorError，付録B

バージョンアップ時の，API，定義，コマンドおよびデフォルト値の変更点を記載した。
付録C

単なる誤字・脱字などはお断りなく訂正しました。

変更内容（3000-3-D69-20） uCosminexus TP1/Connector for .NET Framework　07-02

追加・変更内容

MSDTCを利用するほかのリソースとOpenTP1が使用するリソースとの間で分散トランザクション連携を実現する，MSDTC連携機能を追加した。これに伴い，次のように変更した。
構成定義に次の要素を追加した。

distributedTransaction要素

recoveryService要素

構成定義の<log>要素のlevel属性のログレベルに，次のメッセージIDを追加した。

KFCA32471-I

KFCA32472-I

KFCA32473-I

KFCA32474-I

KFCA32475-I

KFCA32476-I

KFCA32480-I

KFCA32495-I

KFCA32477-I

KFCA32478-I

次のコマンドを追加した。

cnnnidgen

cnntrsls

TP1ConnectorErrorクラスのフィールドに，DCCNNER_DISTRIBUTED_TRNを追加した。

リモートAPI機能でスタティックコネクションスケジュールモードを使用する場合の注意事項を追加した。

WCFの統一化されたプログラミングモデルからOpenTP1にサービスを要求できる，WCF連携機能を追加した。これに伴い，次のクラスを追加した。

TP1IntegrationBehavior

TP1IntegrationBinding

TP1RpcClient

変更内容（3000-3-D69-10） uCosminexus TP1/Connector for .NET Framework　07-01

追加・変更内容

あるコネクションが接続障害を検知したあとにほかのコネクションがその接続先に接続することを防止する，接続障害軽減機能を追加した。これに伴い，構成定義の<connection>要素に次の属性を追加した。

failureInfoSharing属性

failureCheckInterval属性

また，構成定義の<log>要素のlevel属性のログレベル2に，次のメッセージIDを追加した。

KFCA32413-I

KFCA32414-I

Windows Vistaを追加した。

はじめに

このマニュアルは，プログラムプロダクトR-15451-21 uCosminexus TP1/Connector for .NET Frameworkの機能と使い方について説明したものです。

本文中に記載されている製品のうち，このマニュアルの対象製品ではない製品については，OpenTP1 Version 7対応製品の発行時期をご確認ください。

＜はじめにの構成＞

対象読者

マニュアルの構成

関連マニュアル

読書手順

図中で使用する記号

文法の記号

このマニュアルでの表記

略語一覧

このマニュアルで使用している記号

常用漢字以外の漢字の使用について

KB（キロバイト）などの単位表記について

対象読者

システム管理者，システム設計者，プログラマ，オペレータの方を対象としています。また，.NET Frameworkを利用したプログラミングの知識を持っていることを前提としています。

なお，このマニュアルの前提であるマニュアル「TP1/Client for .NET Framework 使用の手引」を必ずお読みください。

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第1章　機能

TP1/Connector for .NET Frameworkの機能について説明しています。

第2章　構成定義

TP1/Connector for .NET Frameworkで使用する構成定義について説明しています。

第3章　UAPの作成と実行

TP1/Connector for .NET Frameworkで使用するUAPの作成方法とサンプルプログラムの使用方法について説明しています。

第4章　運用コマンド

TP1/Connector for .NET Frameworkで使用する運用コマンドについて説明しています。

第5章　クラスリファレンス

TP1/Connector for .NET Frameworkで利用するクラスについて説明しています。

第6章　障害運用

TP1/Connector for .NET Frameworkで障害が発生した場合の対処方法について説明しています。

付録A　DCCM3と接続する場合の注意事項

RPCやメッセージ送受信機能を使用してDCCM3と接続する場合の注意事項について説明しています。

付録B　Connector .NETで利用できるクラスのフィールド

TP1/Connector for .NET Frameworkで利用できるクラスについて説明しています。

付録C　バージョンアップ時の変更点

各バージョンでのAPI，定義，およびコマンドの変更点について説明しています。

付録D　用語解説

TP1/Connector for .NET Frameworkに関する用語について説明しています。

関連マニュアル

読書手順

このマニュアルは，利用目的に合わせて，章を選択して読むことができます。次の案内に従ってお読みいただくことをお勧めします。

図中で使用する記号

このマニュアルの図中で使用する記号を，次のように定義します。

文法の記号

（1）文法記述記号

文法の記述形式について説明する記号です。

文法記述記号
意味

〔　　　〕
この記号で囲まれている項目は省略できることを示します。
（例）spp2tsp 〔-n 名前空間名称〕
これは，「spp2tsp」と指定するか，または「spp2tsp -n 名前空間名称」と指定することを示します。
ただし，構成定義の説明では省略できる項目にこの記号は使用しません。

…
この記号で示す直前の項目を繰り返し指定できることを示します。
（例）-R アセンブリ名称〔,アセンブリ名称〕…
これは，-Rオプションのアセンブリ名称を繰り返し指定できることを示します。

｜
この記号で区切られた項目は選択できることを示します。
（例）watchTimeNotification="true｜false"
これは，watchTimeNotification属性にtrueかfalseのどちらかを指定できることを示します。

｛　　　｝
この記号で囲まれている複数の項目のうちから一つを選択できることを示します。
（例）-l ｛cs｜vjs｜vb｝
これは，cs，vjs，vbの三つのオプションのうち，どれか一つを指定することを示します。

　　（下線）
この記号で示す項目は，該当オプション，要素，属性，またはコマンド引数を省略した場合の仮定値を示します。
（例）-E ｛big｜little｝
これは，オプションの指定を省略した場合，bigオプションを仮定することを示します。

（2）属性表示記号

ユーザ指定値の範囲などを説明する記号です。

属性表示記号 | 意味
～ | この記号のあとにユーザ指定値の属性を示します。
《　　》 | ユーザ指定値を省略した場合の仮定値を示します。
〈　　〉 | ユーザ指定値の構文要素記号を示します。
((　　)) | ユーザ指定値の指定範囲を示します。

（3）構文要素記号

ユーザ指定値の内容を説明する記号です。

構文要素記号
意味

〈英字記号〉
アルファベット（A～Z，a～z）と#，@，¥

〈符号なし整数〉
数字（0～9）

〈識別子〉
先頭がアルファベット（A～Z，a～z）で始まる英数字列

〈記号名称〉
先頭が英字記号で始まる英数字記号列

〈文字列〉
任意の文字の並び

〈パス名〉
記号名称，円記号（¥），およびピリオド（.）の並び
（ただし，パス名は使用しているOSに依存します）

〈ファイル名〉
任意の文字の並び
（ただし，ファイル名は使用しているOS，およびアプリケーションに依存します）

このマニュアルでの表記

このマニュアルでは，製品の名称を省略して表記しています。製品の名称と，このマニュアルでの表記を次に示します。

製品名称 | このマニュアルでの表記
Microsoft(R) .NET Framework Software Development Kit | .NET Framework SDK
Visual C# | C#
COBOL2002 for .NET Framework Developer | COBOL2002 for .NET Framework
COBOL2002 for .NET Framework Server Suite
COBOL2002 for .NET Framework Server Runtime
uCosminexus TP1/Client for .NET Framework | TP1/Client for .NET Framework | Client .NET
uCosminexus TP1/Connector for .NET Framework | TP1/Connector for .NET Framework | Connector .NET
VOS1 DCCM3 | DCCM3
VOS3 XDM/DCCM3
uCosminexus TP1/Extension for .NET Framework | TP1/Extension for .NET Framework | Extension .NET
Visual J# | J#
MSDN(R) | MSDN
uCosminexus TP1/NET/TCP/IP | TP1/NET/TCP/IP
uCosminexus TP1/LiNK | TP1/LiNK | TP1/Server
uCosminexus TP1/Server Base | TP1/Server Base
Microsoft(R) Visual Basic(R) 2005 | Visual Basic
Microsoft(R) Visual Basic(R) 2008
Microsoft(R) Visual Studio(R) 2005 Academic Edition | Visual Studio 2005 | Visual Studio
Microsoft(R) Visual Studio(R) 2005 Professional Edition
Microsoft(R) Visual Studio(R) 2005 Standard Edition
Microsoft(R) Visual Studio(R) 2005 Team Edition for Software Architects
Microsoft(R) Visual Studio(R) 2005 Team Edition for Software Developers
Microsoft(R) Visual Studio(R) 2005 Team Edition for Software Testers
Microsoft(R) Visual Studio(R) 2005 Team Suite
Microsoft(R) Visual Studio(R) 2008 Professional Edition | Visual Studio 2008
Microsoft(R) Visual Studio(R) 2008 Standard Edition
Microsoft(R) Visual Studio(R) Team System 2008 Architecture Edition
Microsoft(R) Visual Studio(R) Team System 2008 Database Edition
Microsoft(R) Visual Studio(R) Team System 2008 Development Edition
Microsoft(R) Visual Studio(R) Team System 2008 Team Suite
Microsoft(R) Visual Studio(R) Team System 2008 Test Edition
Microsoft(R) Windows(R) 2000 Advanced Server Operating System | Windows 2000
Microsoft(R) Windows(R) 2000 Datacenter Server Operating System
Microsoft(R) Windows(R) 2000 Professional Operating System
Microsoft(R) Windows(R) 2000 Server Operating System
Microsoft(R) Windows(R) Software Development Kit for Windows Vista(R) and .NET Framework 3.0 Runtime Components | Windows SDK 6.0 | Windows SDK
Microsoft(R) Windows(R) Software Development Kit (v6.1) for Windows Server(R) 2008 and .NET Framework 3.5 | Windows SDK 6.1
Microsoft(R) Windows Server(R) 2003, Datacenter Edition | Windows Server 2003（32ビット用） | Windows Server 2003
Microsoft(R) Windows Server(R) 2003, Enterprise Edition
Microsoft(R) Windows Server(R) 2003, Standard Edition
Microsoft(R) Windows Server(R) 2003 R2, Enterprise Edition
Microsoft(R) Windows Server(R) 2003 R2, Standard Edition
Microsoft(R) Windows Server(R) 2003, Datacenter x64 Edition | Windows Server 2003（64ビット用）
Microsoft(R) Windows Server(R) 2003, Enterprise x64 Edition
Microsoft(R) Windows Server(R) 2003, Standard x64 Edition
Microsoft(R) Windows Server(R) 2003 R2, Enterprise x64 Edition
Microsoft(R) Windows Server(R) 2003 R2, Standard x64 Edition
Microsoft(R) Windows Server(R) 2008 Datacenter (x86) | Windows Server 2008（32ビット用） | Windows Server 2008
Microsoft(R) Windows Server(R) 2008 Enterprise (x86)
Microsoft(R) Windows Server(R) 2008 Standard (x86)
Microsoft(R) Windows Server(R) 2008 Datacenter (x64) | Windows Server 2008（64ビット用）
Microsoft(R) Windows Server(R) 2008 Enterprise (x64)
Microsoft(R) Windows Server(R) 2008 Standard (x64)
Microsoft(R) Windows Vista(R) Business (x86) | Windows Vista（32ビット用） | Windows Vista
Microsoft(R) Windows Vista(R) Enterprise (x86)
Microsoft(R) Windows Vista(R) Ultimate (x86)
Microsoft(R) Windows Vista(R) Business (x64) | Windows Vista（64ビット用）
Microsoft(R) Windows Vista(R) Enterprise (x64)
Microsoft(R) Windows Vista(R) Ultimate (x64)
Microsoft(R) Windows(R) XP Professional Operating System | Windows XP

TP1/Extension for .NET Framework，TP1/Client for .NET Framework，およびTP1/Connector for .NET Frameworkを総称する場合は，OpenTP1 for .NET Frameworkと表記しています。

Windows 2000，Windows XP，Windows Server 2003，Windows Vista，およびWindows Server 2008で機能差がない場合，Windowsと表記しています。

略語一覧

このマニュアルで使用する英略語の一覧を次に示します。

英略語 | 英字での表記
ADO | ActiveX Data Object
AP | Application Program
API | Application Programming Interface
ASP | Active Server Pages
CLR | Common Language Runtime
CLS | Common Language Specification
CTS | Common Type System
CUP | Client User Program
CUP.NET | Client User Program for .NET Framework
DB | Data Base
DID | Distributed Identifier
DLL | Dynamic Linking Library
EBCDIK | Extended Binary Coded Decimal Interchange Kana Code
GAC | Global Assembly Cache
GUI | Graphical User Interface
HTTP | Hyper Text Transfer Protocol
IIS | Internet Information Services
MHP | Message Handling Program
MSDTC | Microsoft Distributed Transaction Coordinator
OS | Operating System
PC | Personal Computer
RPC | Remote Procedure Call
SOAP | Simple Object Access Protocol
SPP | Service Providing Program
SPP.NET | Service Providing Program for .NET Framework
SUP | Service Using Program
SUP.NET | Service Using Program for .NET Framework
TCP/IP | Transmission Control Protocol/Internet Protocol
TSP | TP1 Service Proxy
UAC | User Account Control
UAP | User Application Program
UI | User Interface
WCF | Windows Communication Foundation
WS | Workstation
WSDL | Web Services Description Language
WS-I | Web Services Interoperability Organization
WWW | World Wide Web
XA | Extended Architecture
XML | eXtensible Markup Language

このマニュアルで使用している記号

注意

間違いやすい点や注意しなければならない点などについて説明しています。

ポイント

その説明の要点などについて説明しています。

参考

補足的な情報などについて説明しています。

常用漢字以外の漢字の使用について

このマニュアルでは，常用漢字を使用することを基本としていますが，次に示す用語については，常用漢字以外の漢字を使用しています。

個所（かしょ）　捕捉（ほそく）

KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

1.　機能

この章では，TP1/Connector for .NET Framework（Connector .NET）の機能について説明します。Connector .NETは，OpenTP1 for .NET Frameworkを構成する三つの製品のうちの一つです。OpenTP1 for .NET Frameworkの概要については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。なお，必要に応じて次のマニュアルも参照してください。

・「OpenTP1 解説」

・「TP1/LiNK 使用の手引」

＜この章の構成＞

1.1　リモートプロシジャコール（RPC）

1.2　トランザクション制御機能

1.3　TCP/IP通信機能

1.4　コネクションプーリング機能

1.5　バッファプーリング機能

1.6　TSP自動生成機能

1.7　リソース監視機能

1.8　接続障害軽減機能

1.9　WCF連携機能

1.10　環境設定

1.1　リモートプロシジャコール（RPC）

Connector .NETのアプリケーションは，ほかのUAPとリモートプロシジャコール（RPC）を使用して通信できます。

＜この節の構成＞

1.1.1　RPCの形態によるRPCインタフェースの使用可否

1.1.2　RPC送受信メッセージの最大長拡張機能

1.1.3　RPCデータのXMLマッピング機能

1.1.1　RPCの形態によるRPCインタフェースの使用可否

Connector .NETのアプリケーションからサービス要求をする場合の，RPCの形態によるRPCインタフェースの使用可否を次の表に示します。

なお，RPCの形態およびRPCインタフェースの詳細については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

表1-1　RPCの形態によるRPCインタフェースの使用可否

RPCの形態 | RPCインタフェース
.NETインタフェース定義を使用したRPC | サービス定義（カスタムレコード）を使用したRPC | バイナリデータ（インデクスドレコード）を使用したRPC
同期応答型RPC | ○ | ○ | ○
非同期応答型RPC | × | × | ×
非応答型RPC | ○※ | ○ | ○
連鎖RPC | ○ | ○ | ○

（凡例）

○：使用できます。

×：使用できません。

注※

呼び出すメソッドの戻り値のデータ型がSystem.Voidで，かつ引数が値渡しだけの場合に使用できます。それ以外の場合はRPC要求時に例外が発生します。

1.1.2　RPC送受信メッセージの最大長拡張機能

RPC送受信メッセージの最大長拡張機能を使用すると，TP1ConnectionクラスのExecuteメソッドで送受信できるユーザメッセージの最大長を1～8メガバイトで指定できます。ただし，RPC送受信メッセージの最大長拡張機能を使用しない場合のRPC送受信メッセージの最大長は1メガバイトです。この機能を使用する場合，option要素のmaxMessageSize属性を指定してください。

この機能を使用する場合，次の点に注意してください。

RPC送受信メッセージの最大長拡張機能を使用する場合，次に示す製品でも同様の機能を使用できるように設定してください。

TP1/Server

Extension .NET

Client .NET

設定方法については，マニュアル「OpenTP1 システム定義」，マニュアル「TP1/Extension for .NET Framework 使用の手引」，およびマニュアル「TP1/Client for .NET Framework 使用の手引」のRPC送受信メッセージの最大長拡張機能の説明を参照してください。

.NETインタフェース定義を使用する場合は，Connector .NETで設定した最大長の値以上の値を，TP1/ServerやExtension .NETのRPC送受信メッセージの最大長拡張機能に設定してください。

1.1.3　RPCデータのXMLマッピング機能

RPCデータのXMLマッピング機能を使用すると，入出力パラメタおよび戻り値をXML文書（XmlDocumentオブジェクト）（System.Xml.XmlDocument）としてRPCが行えます。クライアントスタブが，XML文書と.NETインタフェース定義のサービスメソッドの入出力パラメタおよび戻り値，またはサービス定義（カスタムレコード）との変換を行います。したがって，SPP.NETまたはSPPに送信するデータ，およびSPP.NETまたはSPPから受信したデータをXML文書として扱いたい場合，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）で利用したい場合などに便利です。

この機能は，Connector .NET用のクライアントスタブでだけ使用できます。

詳細については，「3.1.1(4)　.NETインタフェース定義からXMLスキーマへのマッピング」，および「3.1.2(3)　サービス定義からXMLスキーマへのマッピング」を参照してください。

＜この項の構成＞

(1)　RPCデータのXMLマッピング機能を使用した場合のRPCインタフェースの種類

(1)　RPCデータのXMLマッピング機能を使用した場合のRPCインタフェースの種類

OpenTP1 for .NET FrameworkのUAPから，サービス要求をする場合のRPCインタフェースには次の3種類があります。

.NETインタフェース定義を使用したRPC

サービス定義（カスタムレコード）を使用したRPC

バイナリデータ（インデクスドレコード）を使用したRPC

上記のRPCインタフェースの概要については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

Connector .NETを使用すると，RPCデータのXMLマッピング機能を使用して，サービス要求をすることもできます。RPCデータのXMLマッピング機能を使用した場合，バイナリデータ（インデクスドレコード）を使用したRPCは実行できません。

ここでは，RPCデータのXMLマッピング機能を使用したRPCについて説明します。

(a)　.NETインタフェース定義を使用したRPC

RPCデータのXMLマッピング機能を使用すると，入出力パラメタおよび戻り値をXML文書（XmlDocumentオブジェクト）（System.Xml.XmlDocument）としてRPCが行えます。

クライアントスタブがXML文書とサービスメソッドの入出力パラメタおよび戻り値との変換を行います。したがって，SPP.NETに送信するデータ，およびSPP.NETから受信したデータをXML文書として扱いたい場合，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）で利用したい場合などに便利です。

なお，RPCデータのXMLマッピング機能を使用してRPCを行った場合でも，SPP.NETが送受信するデータ形式には影響ありません。

RPCデータのXMLマッピング機能を使用した場合に，.NETインタフェース定義を使用したRPCの概要を次の図に示します。

図1-1　.NETインタフェース定義を使用したRPCの概要（RPCデータのXMLマッピング機能を使用した場合）

注※1

サービス定義から生成されるクライアントスタブとは異なるものです。

注※2

RPCデータのXMLマッピング機能を使用したクライアントスタブは，Connector .NETでだけ生成および使用ができます。

入力データ用XMLスキーマに従ったXML文書を，サービスメソッドの引数として指定してRPCを行います。応答データがある場合，出力データ用XMLスキーマに従ったXML文書がサービスメソッドの戻り値として返されます。

(b)　サービス定義（カスタムレコード）を使用したRPC

RPCデータのXMLマッピング機能を使用すると，入出力パラメタおよび戻り値をXML文書（XmlDocumentオブジェクト）（System.Xml.XmlDocument）としてRPCが行えます。

クライアントスタブがXML文書とカスタムレコードとの変換を行います。したがって，SPP.NETまたはSPPに送信するデータ，およびSPP.NETまたはSPPから受信したデータをXML文書として扱いたい場合，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）で利用したい場合などに便利です。

なお，RPCデータのXMLマッピング機能を使用してRPCを行った場合でも，SPP.NETまたはSPPが送受信するデータ形式には影響ありません。

RPCデータのXMLマッピング機能を使用した場合に，サービス定義（カスタムレコード）を使用したRPCの概要を次の図に示します。

図1-2　サービス定義（カスタムレコード）を使用したRPCの概要（RPCデータのXMLマッピング機能を使用した場合）

注※1

.NETインタフェース定義から生成されるクライアントスタブとは異なるものです。

注※2

RPCデータのXMLマッピング機能を使用したクライアントスタブは，Connector .NETでだけ生成および使用ができます。

入力データ用XMLスキーマに従ったXML文書を，サービスメソッドの引数として指定してRPCを行います。応答データがある場合，出力データ用XMLスキーマに従ったXML文書がサービスメソッドの戻り値として返されます。

1.2　トランザクション制御機能

Connector .NETからOpenTP1のトランザクションを制御できます。

＜この節の構成＞

1.2.1　トランザクションの種類

1.2.2　ローカルトランザクションの概要

1.2.3　ローカルトランザクション制御機能を使用する場合の設定

1.2.4　ローカルトランザクションの開始と同期点取得

1.2.5　ローカルトランザクションの同期点取得

1.2.6　障害発生時のローカルトランザクションの同期点を検証する方法

1.2.7　分散トランザクションの概要

1.2.8　分散トランザクションの単一フェーズコミット最適化

1.2.9　未決着トランザクションの完了処理

1.2.10　分散トランザクションのトランザクションリカバリサービス

1.2.11　MSDTC連携機能を使用するための作業の流れ

1.2.12　MSDTC連携機能を使用する場合のTP1/Serverの設定

1.2.13　分散トランザクションのアプリケーションの作成

1.2.14　ノード識別子の決定

1.2.15　MSDTC連携機能を使用する場合の構成定義での指定

1.2.16　トランザクションリカバリサービスの開始

1.2.17　MSDTC連携機能を使用している場合の障害発生時の運用

1.2.1　トランザクションの種類

トランザクションには，次の2種類があります。

ローカルトランザクション
詳細は，「1.2.2　ローカルトランザクションの概要」を参照してください。

分散トランザクション
詳細は，「1.2.7　分散トランザクションの概要」を参照してください。

1.2.2　ローカルトランザクションの概要

OpenTP1が管理するトランザクションです。Connector .NETを使用するアプリケーション上でOpenTP1以外のリソースマネジャへのアクセスをトランザクションに含めることはできません。

1.2.3　ローカルトランザクション制御機能を使用する場合の設定

トランザクション制御をする場合，Connector .NETに指定するClient .NET構成定義およびサーバ側のTP1/Server Baseの定義を次のように指定しておく必要があります。

＜この項の構成＞

(1)　Client .NET構成定義

(2)　TP1/Server Baseのユーザサービス定義

(1)　Client .NET構成定義

オートコネクトモードでリモートAPI機能を使用するように指定します。

【指定例】

…
<tp1Server host="" />
<rpc use="rap" watchTime="0" />
<rapService port="10020" autoConnect="true"/>
…

(2)　TP1/Server Baseのユーザサービス定義

サーバ側のTP1/Server Baseのトランザクションとして実行するSPPは，ユーザサービス定義のatomic_updateオペランドにYを指定します。

1.2.4　ローカルトランザクションの開始と同期点取得

Connector .NETのアプリケーションからTP1ConnectionクラスのBeginメソッドを呼び出して，トランザクションを開始します。

Beginメソッドを呼び出してから，同期点取得（コミット）までが，グローバルトランザクションの範囲となります。Beginメソッドを呼び出したあと，そのグローバルトランザクションの中で新たなBeginメソッドは呼び出せません。

Connector .NETのアプリケーションからSPP.NETまたはSPPに対してRPC要求を実行すると，アプリケーションはrapサーバでルートトランザクションブランチを生成し，呼び出したSPP.NETまたはSPPはトランザクションブランチとして実行されます。

トランザクションとRPCの関係を次の図に示します。

図1-3　トランザクションとRPCの関係

なお，Beginメソッドの呼び出しから，RPC要求，同期点取得の間は，同一のTP1Connectionオブジェクトである必要があります。

1.2.5　ローカルトランザクションの同期点取得

＜この項の構成＞

(1)　コミット

(2)　ロールバック

(3)　トランザクションの処理時間について

(1)　コミット

トランザクションが正常終了したときの同期点取得（コミット）は，Connector .NETのアプリケーションからTP1ConnectionクラスのCommitメソッドを呼び出して要求します。TP1ConnectionクラスのCommitメソッドは，TP1ClientクラスのCommitメソッドを呼び出します。

グローバルトランザクションは，すべてのトランザクションブランチが正常に終了したことで正常終了となります。

次の場合は，トランザクションはロールバックされます。

TP1ConnectionクラスのCommitメソッドを呼び出さないでアプリケーションが終了したとき

TP1ConnectionクラスのCommitメソッドを呼び出す前にアプリケーションが異常終了したとき

(2)　ロールバック

(a)　TP1/Serverの処理でのエラーの場合

トランザクションでエラーが発生すると，TP1ConnectionクラスのCommitメソッドで例外が発生します。そのトランザクションは部分回復対象としてロールバックされます。グローバルトランザクション内のどれか一つのトランザクションブランチでエラーが発生した場合でも，グローバルトランザクション全体がロールバックの対象となります。

このときTP1/Serverは，トランザクションブランチをロールバック対象と見なして，部分回復処理をします。

(b)　ロールバック要求メソッドを呼び出す場合

トランザクションをConnector .NETのアプリケーションの判断でロールバックしたいときは，Connector .NETのアプリケーションからTP1ConnectionクラスのRollbackメソッドを呼び出して要求します。TP1ConnectionクラスのRollbackメソッドは，TP1ClientクラスのRollbackメソッドを呼び出します。

(3)　トランザクションの処理時間について

トランザクションに関する次に示す時間をClient .NET構成定義で指定できます。

トランザクション同期点処理時の最大通信待ち時間

トランザクションブランチ最大実行可能時間

詳細については，マニュアル「TP1/Client for .NET Framework 使用の手引」の構成定義についての記述を参照してください。

1.2.6　障害発生時のローカルトランザクションの同期点を検証する方法

Connector .NETのアプリケーションから開始したトランザクションで障害が発生した場合，そのトランザクションブランチがコミットされたかどうかを検証できます。トランザクションの同期点を検証するときは，構成定義の<log>要素のlevel属性に2を設定しておきます。

Connector .NETではトランザクション開始後，トランザクショングローバル識別子およびトランザクションブランチ識別子をConnector .NETログファイルに出力します。

Connector .NETログファイルのトランザクショングローバル識別子と，サーバ側のメッセージログファイルに出力されるトランザクションの結果を突き合わせることによって，アプリケーションから開始したトランザクションがコミットされたかどうか検証できます。

1.2.7　分散トランザクションの概要

Connector .NETは，Microsoft Distributed Transaction Coordinator（MSDTC）の分散トランザクションとOpenTP1のトランザクションとの2相コミットによるトランザクション連携を行い，MSDTC連携機能を実現します。MSDTC連携機能を使用すると，MSDTCを利用するほかのリソースとOpenTP1が使用するリソースとの間で分散トランザクション連携ができます。

MSDTC連携機能を使用したアプリケーションでは，.NET Frameworkが提供するSystem.Transactions名前空間内のAPIを使用することで，OpenTP1をリソースマネジャとしてMSDTCの分散トランザクションに参加させることができます。また，アプリケーションやOpenTP1で障害が発生した場合，Connector .NETが提供するトランザクションリカバリサービスがトランザクションを自動的に回復します。これによって，MSDTCの分散トランザクションでOpenTP1とOpenTP1以外のリソースとの整合性を保証します。トランザクションリカバリサービスの詳細については，「1.2.10　分散トランザクションのトランザクションリカバリサービス」を参照してください。

MSDTC連携機能では，OpenTP1が提供するXAリソースサービスを使用します。XAリソースサービスの詳細については，マニュアル「OpenTP1 解説」を参照してください。

＜この項の構成＞

(1)　MSDTC連携機能の概要

(2)　WCF連携機能使用時のMSDTC連携機能の概要

(3)　前提条件

(4)　MSDTC連携機能で使用できるRPC

(1)　MSDTC連携機能の概要

MSDTC連携機能の概要を次の図に示します。

図1-4　MSDTC連携機能の概要

(2)　WCF連携機能使用時のMSDTC連携機能の概要

MSDTC連携機能をWCFサービスで使用することで，他システムとのWS-AtomicTransactionによるトランザクション連携もできます。このとき，WCFサービスからOpenTP1へのサービス要求には，WCF連携機能を使用することもできます。WCF連携機能の詳細については「1.9　WCF連携機能」を参照してください。

WCF連携機能使用時のMSDTC連携機能の概要を次の図に示します。

図1-5　WCF連携機能使用時のMSDTC連携機能の概要

(3)　前提条件

(a)　適用OS

MSDTC連携機能を使用する場合，次のOSのどちらかが必要です。

Windows Vista

Windows Server 2008

(b)　前提ソフトウェア

MSDTC連携機能を使用する場合，次に示すソフトウェアが必要です。

TP1/Client for .NET Framework 07-02以降

.NET Framework v2.0，.NET Framework v3.0，または .NET Framework v3.5

また，トランザクション連携をする接続先のOpenTP1は，次のどちらかである必要があります。

TP1/Server Base 07-01以降

TP1/LiNK 07-01以降

(4)　MSDTC連携機能で使用できるRPC

MSDTC連携機能で使用できるRPCを次の表に示します。

表1-2　MSDTC連携機能で使用できるRPC

分類 | RPCの方式 | RPCの使用可否
WCF連携機能使用時 | WCF連携機能未使用時
RPCの種類 | リモートAPI機能を使用したRPC | ○ | ○
ネームサービスを使用したRPC | × | ×
スケジューラダイレクト機能を使用したRPC | × | ×
コネクトモード | オートコネクトモード | ○ | ○
非オートコネクトモード | × | ×
RPCの形態 | 同期応答型RPC | ○ | ○
非同期応答型RPC | × | ×
非応答型RPC | × | ○
連鎖型RPC | × | ○
トランザクションを引き継がないRPC | × | ○

（凡例）

○：使用できます。

×：使用できません。

1.2.8　分散トランザクションの単一フェーズコミット最適化

MSDTC連携機能では，トランザクションの単一フェーズコミット最適化を行うことができます。単一フェーズコミット最適化とは，トランザクションに参加するリソースがOpenTP1のリソース一つだけである場合に，単一フェーズコミットを行う機能です。トランザクションに参加するリソースが複数ある場合は，自動的に2相コミットを行います。

単一フェーズコミット最適化を行う場合は，<distributedTransaction>要素のoptimize1PC属性にtrueを指定してください。falseを指定した場合，トランザクションに対して常に2相コミットが行われます。

＜この項の構成＞

(1)　単一フェーズコミット最適化を使用する場合

(2)　単一フェーズコミット最適化を使用しない場合

(1)　単一フェーズコミット最適化を使用する場合

単一フェーズコミット最適化を使用する場合で，トランザクションに参加するリソースがOpenTP1のリソース一つだけであるときは，単一フェーズコミットが発行されるため，処理が簡略化されます。

ただし，次に示す内容を考慮して単一フェーズコミット最適化を使用してください。

単一フェーズコミット最適化を使用する場合に，OpenTP1のリソースがトランザクションに参加した時点でほかのリソースが一つも参加していないと，MSDTCのDIDがOpenTP1に通知されません。そのため，OpenTP1が管理するトランザクションを強制決着する際に，MSDTCが管理するトランザクションと照合できないことがあります。

単一フェーズコミット最適化を使用する場合で，単一フェーズコミットを行う際にOpenTP1に対して通信エラーが発生したときは，アプリケーションでSystem.Transactions.TransactionInDoubtException例外が発生します。このときトランザクションがコミットまたはロールバックされたかは不明となります。

(2)　単一フェーズコミット最適化を使用しない場合

単一フェーズコミット最適化を使用しない場合は，MSDTCのDIDが常にOpenTP1に通知されます。このため，トランザクションの強制決着を行う場合などに，MSDTCとOpenTP1のトランザクションのステータスを照合できます。

ただし，常に2フェーズコミットが行われるため，トランザクションに参加するOpenTP1のリソースが一つであっても，単一フェーズコミット最適化を行う場合に比べて通信回数が増加します。

1.2.9　未決着トランザクションの完了処理

アプリケーションで未決着となったトランザクションの完了処理は，Connector .NETが生成するバックグラウンドスレッドが行います。このバックグラウンドスレッドは，アプリケーションドメインでトランザクションとして扱われる最初のサービス要求時に一度だけ生成されます。未決着トランザクションの完了処理の流れを次の図に示します。

図1-6　未決着トランザクションの完了処理

アプリケーションからの処理要求（コミット準備，コミット，ロールバック処理）に失敗した場合，バックグラウンドスレッドはアプリケーションで失敗した処理要求を自動的に完了させます。バックグラウンドスレッドでトランザクションの完了処理に失敗した場合，バックグラウンドスレッドは一定間隔で再度トランザクションの完了処理を試みます。この間隔は，<distributedTransaction>要素のrecoverRetryInterval属性で指定します。

OpenTP1が障害中などの理由でトランザクションの完了処理に失敗した場合は，失敗するたびにログメッセージが出力されます。ログレベルを3に設定している場合は，トランザクションの完了処理を再試行するたびにコネクションの取得および解放に関するログメッセージが出力されます。そのため，MSDTC連携機能を使用する場合は，アプリケーションの構成定義の<log>要素のfileSize属性に十分大きな値を指定してください。

1.2.10　分散トランザクションのトランザクションリカバリサービス

トランザクションリカバリサービスとは，Connector .NETが提供するWindowsサービスです。トランザクションリカバリサービスは，既定では停止の状態となっています。MSDTC連携機能を使用する場合は，必ずトランザクションリカバリサービスを開始の状態にしてください。インストール時にConnector .NETのインストーラによってWindowsサービスに登録されるトランザクションリカバリサービスの内容を次の表に示します。

表1-3　トランザクションリカバリサービスの登録内容

タブ | 項目 | 設定値
全般 | サービス名 | TP1ConnectorNETTRS
表示名 | TP1/Connector.NET Transaction Recovery Service
説明 | Recovers distributed transaction.
実行ファイルのパス | "<Connector .NETのインストールディレクトリ>¥trs¥cnntrs.exe"
スタートアップの種類 | 手動
ログオン | ログオン | ローカルシステムアカウント
デスクトップとの対話をサービスに許可 | （チェックなし）
回復 | 最初のエラー | 何もしない
次のエラー | 何もしない
その後のエラー | 何もしない
エラーカウントのリセット | 0（日後に行う）
依存関係 | － | 依存関係なし

（凡例）

－：該当しません。

OSを起動する際にトランザクションリカバリサービスを自動的に起動させたい場合は，「スタートアップの種類」を変更してください。トランザクションリカバリサービスに障害が発生した場合にトランザクションリカバリサービスを自動的に再起動させたいときは，「最初のエラー」，「次のエラー」，「その後のエラー」および「エラーカウントのリセット」を，それぞれ必要に応じて変更してください。

「スタートアップの種類」，「最初のエラー」，「次のエラー」，「その後のエラー」および「エラーカウントのリセット」以外の項目は変更しないでください。変更した場合，トランザクションリカバリサービスが正常に動作しないことがあります。

トランザクションリカバリサービスが提供する機能について説明します。

＜この項の構成＞

(1)　未決着トランザクションの回復

(2)　アプリケーションドメインの監視

(3)　未決着トランザクションの確認処理

(1)　未決着トランザクションの回復

トランザクションリカバリサービスは，トランザクションリカバリサービスの開始時とアプリケーションドメイン終了の検知時に，未決着トランザクションを回復します。アプリケーションドメイン終了の検知については「(2)　アプリケーションドメインの監視」を参照してください。

未決着トランザクションの回復の流れを次の図に示します。

図1-7　未決着トランザクションの回復の流れ

トランザクションリカバリサービスは，トランザクションリカバリサービスの開始時とアプリケーションドメイン終了の検知時に，OpenTP1のXAリソースサービスから未決着トランザクションの回復情報を取得し，その回復情報を基にMSDTCに対してトランザクションの再参加を行います。そのあとで，アプリケーションで失敗した処理要求をMSDTCから受けたトランザクションリカバリサービスが，トランザクションの処理を完了させます。トランザクションリカバリサービスがトランザクションの完了に失敗した場合は，トランザクションリカバリサービスが再度トランザクションの回復を試みます。

OpenTP1が未決着トランザクションの回復情報の取得やトランザクションの再参加に失敗した場合は，一定間隔で回復情報の取得を再度試みます。この間隔は，<recoveryService>要素のrecoverRetryInterval属性で指定します。

(2)　アプリケーションドメインの監視

トランザクションリカバリサービスは，MSDTC連携機能を使用するConnector .NETのアプリケーションドメインを監視します。トランザクションリカバリサービスの監視下にあるアプリケーションドメインが終了した場合，終了したアプリケーションドメインで未決着となっていたトランザクションを回復します。アプリケーションドメインの監視の流れを次の図に示します。

図1-8　アプリケーションドメインの監視の流れ

アプリケーションドメインの監視は，アプリケーションドメインでトランザクションとして扱われる最初のサービス要求時に自動的に開始されます。監視が開始されてからトランザクションリカバリサービスがダウンして，一定時間経過後にトランザクションリカバリサービスが復旧していた場合は，トランザクションとして扱われる最初のサービス要求時に再度監視が開始されます。アプリケーションドメインの監視は一定間隔で行われます。この間隔は，<recoveryService>要素のappDomainCheckInterval属性で指定します。この間隔がアプリケーションダウンなどが発生してからトランザクションの回復処理が行われるまでの最大時間となります。

トランザクションリカバリサービスは，アプリケーションドメインの終了を検知すると，OpenTP1のXAリソースサービスから未決着トランザクションの回復情報を取得し，その回復情報を基にMSDTCに対してトランザクションの再参加を行います。

コンソールアプリケーションなどでトランザクション範囲内の処理が終了し，コミットやロールバックの処理要求が完了する前にアプリケーションのプロセスが終了した場合は，トランザクションリカバリサービスがトランザクションのコミットやロールバックの処理を完了させます。

(3)　未決着トランザクションの確認処理

トランザクションリカバリサービスは，アプリケーションドメインの監視および未決着トランザクションの回復によってトランザクションの回復処理を完了したあとで，OpenTP1に未決着トランザクションが存在しないかどうかを再確認します。これは，トランザクションリカバリサービスが回復処理を実行したタイミングで，OpenTP1に処理中のトランザクションが存在した場合にOpenTP1に未決着トランザクションが残ることを防止するためです。この確認で未決着トランザクションが存在した場合は，トランザクションの回復処理を行います。この確認処理の間隔は<recoveryService>要素のrecoverCheckInterval属性で，確認処理の回数は<recoveryService>要素のrecoverCheckCount属性で指定します。ただし，指定した回数の確認処理が終了する前に，新たに未決着トランザクションが存在する旨の通知を受けた場合やアプリケーションの終了を検知した場合は，確認処理を終了します。

1.2.11　MSDTC連携機能を使用するための作業の流れ

MSDTC連携機能を使用するために実施する作業の流れを次の図に示します。

図1-9　MSDTC連携機能を使用するために実施する作業の流れ

1.2.12　MSDTC連携機能を使用する場合のTP1/Serverの設定

MSDTC連携機能でトランザクション連携をする場合，接続先（TP1/Server）の設定でXAリソースサービスを使用できるようしておく必要があります。

接続先（TP1/Server）で指定するトランザクションブランチの監視時間を指定する際は，アプリケーションで指定するトランザクションのタイムアウトを考慮してください。詳細については「1.2.13　分散トランザクションのアプリケーションの作成」を参照してください。

＜この項の構成＞

(1)　TP1/Server Baseの設定

(2)　TP1/LiNKの設定

(1)　TP1/Server Baseの設定

TP1/Server Baseでの設定について説明します。

ユーザサービス定義
SPP.NETおよびSPPをトランザクションとして実行する場合は，atomic_update=Yが指定されていることを確認してください。

rapリスナーサービス定義
リモートAPI機能の常設コネクションのスケジュール方法によって，次のように指定してください。

スタティックコネクションスケジュールモードを使用する場合
rapサーバ数（rap_parallel_serverオペランドで指定）が，次に示す値の合計値以上となるように指定してください。
・各アプリケーションの構成定義の<connection>要素のactive属性の指定値
・トランザクションリカバリサービスの構成定義の<connection>要素のactive属性の指定値

ダイナミックコネクションスケジュールモードを使用する場合
rap_recovery_serverオペランドにリカバリ要求用待機rapサーバ数を指定してください。指定する値は，トランザクションリカバリサービスから回復処理要求を行うコネクションの数と合わせてください。

トランザクションサービス定義
XAリソースサービスの使用（xtrn_xar_use=Y）を指定してください。

XAリソースサービス定義
MSDTC連携機能の使用（xar_msdtc_use=Y）を指定してください。また，xar_session_timeオペランドにアイドル状態のトランザクションブランチの監視時間を指定してください。

定義の詳細については，マニュアル「OpenTP1 システム定義」を参照してください。

(2)　TP1/LiNKの設定

TP1/LiNKでの設定について説明します。

［SPP環境設定］ダイアログボックスで［トランザクション属性(T)］チェックボックスをオンにしてください。

リモートAPI機能の常設コネクションのスケジュール方法によって，次のように指定してください。

スタティックコネクションスケジュールモードを使用する場合
［RAPサービス環境設定］ダイアログボックスの［RAPサービスのプロセス数］欄の［常駐(R)］が，次に示す値の合計値以上となるように指定してください。
・各アプリケーションの構成定義の<connection>要素のactive属性の指定値
・トランザクションリカバリサービスの構成定義の<connection>要素のactive属性の指定値

ダイナミックコネクションスケジュールモードを使用する場合
［RAPサービス詳細設定］ダイアログボックスの［その他］タブで［リカバリ要求用待機rapサーバ数(R)］を指定してください。指定する値は，トランザクションリカバリサービスから回復処理要求を行うコネクションの数と合わせてください。

［システム環境設定］ウィンドウの［トランザクション機能］欄の［あり］チェックボックスをオンにしてください。

［XAリソースサービス環境設定］ダイアログボックスの［XAリソースサービスを使用する(X)］欄のチェックボックス，および［MSDTC連携機能を使用する(M)］のチェックボックスをオンにしてください。また，［アイドル状態のトランザクションブランチの監視時間(T)］を指定してください。

定義の詳細については，マニュアル「TP1/LiNK 使用の手引」を参照してください。

1.2.13　分散トランザクションのアプリケーションの作成

分散トランザクションのアプリケーションの開発には，.NET Frameworkが提供するSystem.Transactions名前空間内のAPIを使用します。

System.Transactionsでは，Transactionクラスに基づいた明示的なプログラミングモデルと，TransactionScopeクラスを使用した暗黙的なプログラミングモデルが提供されています。それぞれのプログラミングモデルを使用したConnector .NETのアプリケーション開発例を次に示します。

明示的なプログラミングモデルを使用したアプリケーション開発例

TP1ConnectionManager tcm = new TP1ConnectionManager();

// コネクションの取得
TP1Connection tc = tcm.GetConnection();
              :

// タイムアウトを5分に設定
TimeSpan timeout = new TimeSpan(0,5,0);

using (CommittableTransaction ctrn =
         new CommittableTransaction(timeout))
{

// トランザクションの開始
Transaction.Current = ctrn;

// サービス要求の実行
bool ret = tc.Execute();

   try
   {

// トランザクションの完了
       ctrn.Commit();
   }
   catch (TransactionException exp)
   {
       TextBox1.Text = exp.ToString();
   }
}

// コネクションの解放
tc.Dispose();

暗黙的なプログラミングモデルを使用したアプリケーション開発例

TP1ConnectionManager tcm = new TP1ConnectionManager();

// コネクションの取得
TP1Connection tc = tcm.GetConnection();
              :

// タイムアウトを5分に設定
TimeSpan timeout = new TimeSpan(0,5,0);                        

// トランザクションの開始
using (TransactionScope ts =
new TransactionScope(TransactionScopeOption.Required, timeout))
{

// サービス要求の実行
bool ret = tc.Execute();

// トランザクションの完了
   ts.Complete();
}

// コネクションの解放
tc.Dispose();

＜この項の構成＞

(1)　コネクションとトランザクションの関係

(2)　トランザクションのタイムアウトの設定

(3)　アプリケーションを開発する場合の注意事項

(1)　コネクションとトランザクションの関係

コネクションとトランザクションには，次に示す関係があります。

トランザクション内でサービスを要求すると，そのコネクションが現在のスレッドコンテキストのトランザクションに参加します。

一つのコネクションを同時に複数のトランザクションに参加させることはできません。

複数のコネクションを一つのトランザクションに参加させることはできます。その場合，OpenTP1が管理するトランザクションブランチは複数になります。

トランザクションの操作が完了するまでコネクションは使用中のままとなります。

トランザクション内でTP1ConnectionクラスのDisposeメソッドを呼び出した場合は，アプリケーションからコネクションオブジェクトを解放するだけとなります。

分散トランザクションに参加したコネクションでは，ローカルトランザクションを開始することはできません。

分散トランザクションに参加したコネクションでTP1ConnectionクラスのBeginメソッドを呼び出すと，TP1ConnectorException例外が発生します。

コネクションが分散トランザクションに参加していない場合は，アプリケーションのトランザクション範囲内に記述されたTP1ConnectionクラスのBeginメソッドでもローカルトランザクションが開始されます。

暗黙的なプログラミングモデルを使用したアプリケーションの例とトランザクションの関係を次に示します。なお，明示的なプログラミングモデルの場合は，アプリケーションを次の表のように置き換えてください。

表1-4　暗黙的なプログラミングモデルと明示的なプログラミングモデルの対応

暗黙的なプログラミングモデル | 明示的なプログラミングモデル
TransactionScope(Required) | CommittableTransactionオブジェクトをTransaction.Currentプロパティに設定
TransactionScope(RequiresNew) | CommittableTransactionオブジェクトを新規にインスタンス化して，Transaction.Currentプロパティに設定
TransactionScope(Suppress) | Transaction.Currentプロパティにnullを設定
Complete() | Commit()またはRollback()の発行

(a)　RPC実行時にトランザクションに参加する場合

RPC実行時にトランザクションに参加する場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-10　アプリケーションの例とトランザクションの関係（RPC実行時にトランザクションに参加する場合）

コネクションを取得してサービスの要求を実行する前後で，トランザクションに参加します。

(b)　トランザクションの終了前にコネクションを解放する場合

トランザクションの終了前にコネクションを解放する場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-11　アプリケーションの例とトランザクションの関係（トランザクションの終了前にコネクションを解放する場合）

コネクションを解放してからトランザクションを終了します。トランザクションの開始後にコネクションを取得することもできます。

(c)　トランザクション内でトランザクションとしないサービスを要求する場合

トランザクション内でトランザクションとしないサービスを要求する場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-12　アプリケーションの例とトランザクションの関係（トランザクション内でトランザクションとしないサービスを要求する場合）

トランザクション内でトランザクションコンテキストの抑制を指定することで，サービスの要求をトランザクション外として扱うことができます。

また，トランザクション内でDCRPC_TPNOTRANフラグを指定してサービスを要求した場合も同様の動作となります。トランザクション内でDCRPC_TPNOTRANフラグを指定してサービスを要求した場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-13　アプリケーションの例とトランザクションの関係（トランザクション内でDCRPC_TPNOTRANフラグを指定してサービスを要求した場合）

(d)　トランザクション内で新しいトランザクションを作成する場合

トランザクション内で新しいトランザクションを作成する場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-14　アプリケーションの例とトランザクションの関係（トランザクション内で新しいトランザクションを作成する場合）

トランザクション内で新しいトランザクションを作成してサービスを要求する場合は，別に取得したコネクションを使用してください。一つのコネクションを同時に複数のトランザクションと関連づけた場合は，サービス要求時にTP1ConnectorExceptionが返されます。

(e)　同一のトランザクション内で複数のコネクションを使用する場合

同一のトランザクション内で複数のコネクションを使用する場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-15　アプリケーションの例とトランザクションの関係（同一のトランザクション内で複数のコネクションを使用する場合）

一つのトランザクション内で複数のコネクションを使用する場合は，複数のコネクションが同じトランザクションに参加します。

(f)　WCF連携機能を使用した場合

WCF連携機能を使用した場合の，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-16　アプリケーションの例とトランザクションの関係（WCF連携機能を使用した場合）

また，WCF連携機能を使用した場合でグローバルトランザクションのときの，アプリケーションの例とトランザクションの関係を次の図に示します。

図1-17　アプリケーションの例とトランザクションの関係（WCF連携機能を使用した場合でグローバルトランザクションのとき）

WCF連携機能を使用する場合，TP1RpcClientクラスのCallメソッドを発行すると，内部でGetConnectionメソッド，Executeメソッド，およびDisposeメソッドが発行されます。しかし，トランザクション内の処理が完了するまでコネクションは使用中のままとなります。そのため，一つのトランザクション内で複数回TP1RpcClientクラスのCallメソッドを発行した場合は，複数のコネクションが生成されます。

注意

WCF連携機能を使用する場合，最大同時使用コネクション数（Connector .NET構成定義の<connection>要素のactive属性で指定）には，一つのトランザクション内で発行するTP1RpcClientクラスのCallメソッドの数以上を設定してください。

(2)　トランザクションのタイムアウトの設定

System.Transactionsでは，トランザクションのタイムアウトを設定できます。次のどちらかの方法でトランザクションのタイムアウトを設定します。

なお，設定するトランザクションのタイムアウトの値には条件があります。条件については，「(c)　設定するトランザクションのタイムアウトの条件」を参照してください。

(a)　アプリケーションから設定する場合

次に示す引数にタイムアウトを指定します。

明示的なプログラミングモデルを使用してアプリケーションを開発した場合

System.Transactions.CommittableTransactionクラスのコンストラクタの引数

暗黙的なプログラミングモデルを使用してアプリケーションを開発した場合

System.Transactions.TransactionScopeクラスのコンストラクタの引数

(b)　コントロールパネルから設定する場合

コントロールパネルから設定する「トランザクション タイムアウト」の値は，「(a)　アプリケーションから設定する場合」で設定しなかった場合のデフォルト値となります。

［コントロールパネル］－［管理ツール］－［コンポーネント サービス］を選択します。
［コンポーネント サービス］ダイアログを表示されます。

［コンソールルート］から，［コンピュータ］－［マイコンピュータ］を選択し，プロパティを開きます。

［オプション］タブの「トランザクション タイムアウト」の値を変更します。

(c)　設定するトランザクションのタイムアウトの条件

トランザクションのタイムアウトを設定する場合，CUP.NETおよびOpenTP1で設定する時間監視（問い合わせ間隔，メッセージの送受信など）の値を考慮して設定する必要があります。次の条件をすべて満たす値を設定してください。

トランザクションのタイムアウト（t0）＞問い合わせ間隔（t1）

トランザクションのタイムアウト（t0）＞メッセージの送受信（t2）

トランザクションのタイムアウト（t0）＞トランザクションブランチの処理（t3）

トランザクションのタイムアウト（t0）＜トランザクションブランチの処理完了（t6）

トランザクションのタイムアウト（t0）＜トランザクションブランチの処理完了（t7）

トランザクションのタイムアウトの値が上記の条件を満たしていない場合，トランザクションの実行中にOpenTP1のサービス要求でタイムアウトが発生するおそれがあります。

トランザクションのタイムアウトの時間経過によるタイムアウトが発生した場合は，トランザクション内の処理が終了する前にロールバックが実行されることがあります。ロールバック完了後にトランザクション範囲内のTP1Connection.Executeメソッドなどが呼び出された場合，TP1ConnectorException例外が発生します。

CUP.NETおよびOpenTP1で設定する時間監視の監視区間を次の図に示します。また，時間監視の種類と設定方法を表1-5に示します。なお，図のt0～t8は，表1-5の監視区間と対応しています。

図1-18　時間監視の監視区間

表1-5　時間監視の種類と設定方法

監視区間
監視の種類
設定方法

CUP.NETでの設定
OpenTP1での設定

t0
トランザクションのタイムアウト
次のどちらかの方法で設定します。

APIで設定

TransactionScopeクラスまたはCommittableTransactionクラスのコンストラクタの引数：TimeSpanオブジェクト

GUIで設定

［コントロールパネル］から指定した［トランザクション タイムアウト］の値

－

t1
問い合わせ間隔

Client .NET構成定義

<rapService>要素のinquiredTime属性

rapリスナーサービス定義

rap_inquire_timeオペランド

t2
メッセージの送受信
次のどちらかの方法で設定します。

Client .NET構成定義

<rpc>要素のwatchTime属性

APIで設定

RpcInfoクラスまたはクライアントスタブクラスのWatchTimeプロパティ

rapリスナーサービス定義

rap_watch_timeオペランド

t3
トランザクションブランチの処理

Client .NET構成定義

<xarTransaction>要素のexpireTime属性

rapリスナーサービス定義

trn_expiration_timeオペランド

t4
アイドル状態のトランザクションブランチ
－

XAリソースサービス定義

xar_session_timeオペランド

t5
トランザクションブランチの処理
－

ユーザサービス定義，またはトランザクションサービス定義

trn_expiration_timeオペランド

サービス関数の処理
－

ユーザサービス定義

service_expiration_timeオペランド

t6
トランザクションブランチの処理完了
－

rapリスナーサービス定義，またはトランザクションサービス定義

trn_completion_limit_timeオペランド

t7
トランザクションブランチの処理完了
－

ユーザサービス定義，またはトランザクションサービス定義

trn_completion_limit_timeオペランド

t8
トランザクション同期点処理
－

ユーザサービス定義，またはトランザクションサービス定義

trn_watch_timeオペランド

（凡例）

－：設定できません。

(3)　アプリケーションを開発する場合の注意事項

MSDTC連携機能を使用してアプリケーションを開発する場合は，次の点に注意してください。

構成定義の<distributedTransaction>要素のuse属性にはtrueを指定してください。falseを指定した場合，アプリケーションのトランザクション範囲内でOpenTP1にサービスを要求してもトランザクションには含まれません。

MSDTC連携機能を使用するアプリケーションで，スケジューラダイレクト機能およびネームサービスを使用したRPC要求をする場合は，必ずトランザクション範囲外で要求してください。トランザクション範囲内でスケジューラダイレクト機能およびネームサービスを使用したRPC要求をした場合，TP1ConnectorException例外が発生します。

TCP/IP通信機能を使用する場合は，トランザクション範囲内でのメッセージの送受信はできますが，トランザクションには含まれません。

1.2.14　ノード識別子の決定

アプリケーションを配置するOS環境を一意に識別するためのノード識別子を決定します。ノード識別子を決定するためには，「管理者として実行」で起動したコマンドプロンプトで〈Connector .NETのインストールディレクトリ〉¥binディレクトリをパスに追加して，MSDTC連携機能で使用するノード識別子生成コマンド（cnnnidgen）を実行します。運用コマンドの詳細については，「4.　運用コマンド」の「cnnnidgen（MSDTC連携機能で使用するノード識別子生成コマンド）」を参照してください。

ノード識別子を決定したあと，MSDTC連携機能を使用するアプリケーションおよびトランザクションリカバリサービスの構成定義を指定してトランザクションリカバリサービスを開始します。

1.2.15　MSDTC連携機能を使用する場合の構成定義での指定

MSDTC連携機能を使用する場合，アプリケーションとトランザクションリカバリサービスの両方の構成定義を指定する必要があります。構成定義の詳細については，「2.　構成定義」の「distributedTransaction」および「recoveryService」を参照してください。また，Client .NET構成定義については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

＜この項の構成＞

(1)　アプリケーションの設定

(2)　トランザクションリカバリサービスの設定

(3)　アプリケーションおよびトランザクションリカバリサービスの設定

(1)　アプリケーションの設定

アプリケーション構成ファイル（Web.config，<アプリケーションの実行ファイル名>.configなど）に，次に示す定義を追加してください。

MSDTC連携機能使用の有無
<distributedTransaction>要素のuse属性にtrueを指定してください。

ノード識別子の指定
<distributedTransaction>要素のnodeId属性に指定するノード識別子は，Connector .NETでMSDTC連携機能を使用しているOS環境を一意に識別するためのIDです。
<distributedTransaction>要素のnodeId属性の指定値は，トランザクションリカバリサービスの構成定義の<recoveryService>要素のnodeId属性と一致させる必要があります。この値が一致していない場合，トランザクション開始時にアプリケーションでエラーが発生します。すでにトランザクションリカバリサービスでノード識別子を指定している場合は，その値を使用して指定してください。ノード識別子を新規に作成する場合は，MSDTC連携機能で使用するノード識別子生成コマンド（cnnnidgen）を実行してください。

単一フェーズコミット最適化使用の有無
単一フェーズコミット最適化を行う場合は，<distributedTransaction>要素のoptimize1PC属性にtrueを指定してください。

未決着トランザクションの回復間隔の指定
<distributedTransaction>要素のrecoverRetryInterval属性に，アプリケーションのバックグラウンドスレッドから未決着トランザクションの回復処理を行う間隔を指定してください。

窓口となるOpenTP1のホスト名およびポート番号の指定
Client .NET構成定義の<tp1Server>要素のhost属性およびport属性に，窓口となるOpenTP1のホスト名およびポート番号を指定してください。MSDTC連携機能を使用するクライアントアプリケーションに指定できるOpenTP1のホスト名およびポート番号は，プロファイルID一つにつき一つずつです。

ログレベルの指定
アプリケーションが，トランザクションリカバリサービスに未決着トランザクションが存在する旨を通知した場合などに情報を出力したいときは，<log>要素のlevel属性に2（ログレベル2）を指定してください。トランザクションごとにコミットやロールバックが完了したなどの詳しい情報を出力したい場合は，<log>要素のlevel属性に3（ログレベル3）を指定してください。

最大同時使用コネクション数
WCF連携機能を使用する場合は，<connection>要素のactive属性に，一つのトランザクション内で発行するTP1RpcClientクラスのCallメソッドの数以上を指定してください。

(2)　トランザクションリカバリサービスの設定

〈Connector .NETのインストールディレクトリ〉¥trs下に，トランザクションリカバリサービスのアプリケーション構成ファイル（cnntrs.exe.config）を作成してください。

Connector .NETでは，トランザクションリカバリサービスの構成定義のサンプルを〈Connector .NETのインストールディレクトリ〉¥examples¥config下に提供しています。必要に応じてコピーして使用してください。

ノード識別子の指定
<recoveryService>要素のnodeId属性に指定するノード識別子は，Connector .NETでMSDTC連携機能を使用しているOS環境を一意に識別するためのIDです。
ノード識別子を作成する場合は，MSDTC連携機能で使用するノード識別子生成コマンド（cnnnidgen）を実行してください。

未決着トランザクションの回復間隔の指定
トランザクションリカバリサービスから未決着トランザクションの回復処理を行う間隔を<recoveryService>要素のrecoverRetryInterval属性に指定してください。

アプリケーションドメインの監視間隔の指定
アプリケーションドメインの終了を監視する間隔を<recoveryService>要素のappDomainCheckInterval属性に指定してください。

未決着トランザクションの確認間隔の指定
トランザクション回復処理の完了後，未決着トランザクションが存在しないかを確認する間隔を<recoveryService>要素のrecoverCheckInterval属性に指定してください。

未決着トランザクションの確認回数の指定
トランザクション回復処理の完了後，未決着トランザクションが存在しないかを確認する回数を<recoveryService>要素のrecoverCheckCount属性に指定してください。

RMID格納ディレクトリの指定
トランザクションリカバリサービスが未決着トランザクションの回復処理に必要な情報を保存するRMID格納ディレクトリのパスを，<recoveryService>要素のrmidStoragePath属性に指定してください。なお，RMID格納ディレクトリはあらかじめ作成しておいてください。

プロファイルIDの指定
トランザクションリカバリサービスの設定でClient .NET構成定義の<tp1Server>要素のhost属性およびport属性に指定するプロファイルIDを，<recoveryService>要素のprofiles属性に指定してください。プロファイルIDは，必ずコンマ（,）で区切って指定してください。

窓口となるOpenTP1のホスト名およびポート番号の指定
接続するOpenTP1が一つの場合，接続するOpenTP1は<common>要素内に指定してください。この場合，トランザクションリカバリサービスの設定で<recoveryService>要素のprofiles属性を指定する必要はありません。
接続するOpenTP1が複数ある場合，MSDTC連携機能を使用するアプリケーションが接続するすべてのOpenTP1のホスト名およびポート番号を，Client .NET構成定義の<tp1Server>要素のhost属性およびport属性に指定してください。指定できるOpenTP1のホスト名およびポート番号は，プロファイルID一つにつき一つずつです。なお，アプリケーションのプロファイルIDにはコンマ（,）を使用できますが，トランザクションリカバリサービスの構成定義に指定するプロファイルIDではコンマ（,）は使用しないでください。

コネクションに関する定義の指定

最大同時使用コネクション数
トランザクションリカバリサービスの設定の，窓口となるOpenTP1のホスト名およびポート番号の指定で指定したプロファイルIDの個数を<connection>要素のactive属性に指定してください。

Connector .NETが管理するコネクションプールの最大数
トランザクションリカバリサービスの設定の，窓口となるOpenTP1のホスト名およびポート番号の指定で指定したプロファイルIDの個数を<connection>要素のpooled属性に指定してください。

プロファイルが占有できるコネクションプールの最大数
プロファイルが占有できるコネクションプールの最大数を，<occupation>要素のpooled属性に指定してください。プロファイルが占有できるコネクションプールの最大数は，プロファイルID一つにつき一つずつ指定してください。

特に必要がない場合は，これら以上のコネクション数を指定しないでください。これら以上のコネクション数を指定すると，トランザクションリカバリサービスから接続先rapサーバへの常設コネクション数が増加することによって，アプリケーションで接続できるrapサーバの数が減少することがあります。

ログレベルの指定
トランザクションリカバリサービスの設定では，<log>要素のlevel属性に2（ログレベル2）を指定してください。

Client .NETのエラートレースの取得
Client .NET構成定義の<errTrace>要素を指定して，Client .NETのエラートレースを必ず取得してください。

(3)　アプリケーションおよびトランザクションリカバリサービスの設定

接続するOpenTP1が一つの場合の設定例を次の図に示します。

図1-19　アプリケーションおよびトランザクションリカバリサービスの設定例（接続するOpenTP1が一つの場合）

接続するOpenTP1が複数ある場合で，hostAおよびhostBでMSDTC連携機能を使用する場合の設定例を次の図に示します。

図1-20　アプリケーションおよびトランザクションリカバリサービスの設定例（接続するOpenTP1が複数ある場合）

トランザクションリカバリサービスでは，プロファイルID，および接続するOpenTP1（hostAおよびhostB）を指定します。このとき，hostCではMSDTC連携機能を使用しないため，hostCのプロファイルIDの指定は不要です。

アプリケーションでは，プロファイルID，および接続するOpenTP1（hostA，hostB，およびhostC）を指定します。MSDTC連携機能を使用する場合，接続するOpenTP1はトランザクションリカバリサービスで指定したOpenTP1を指定してください。AP1では，接続するOpenTP1にhostAおよびhostBを指定します。AP2では，接続するOpenTP1にhostBおよびhostCを指定します。

1.2.16　トランザクションリカバリサービスの開始

トランザクションリカバリサービスを開始します。トランザクションリカバリサービスのプロパティで「スタートアップの種類」が「自動」に設定されている場合，トランザクションリカバリサービスを開始する必要はありません。

トランザクションリカバリサービスを開始する方法について説明します。

［コントロールパネル］から開始する場合

［コントロールパネル］－［管理ツール］－［サービス］画面で「TP1/Connector.NET Transaction Recovery Service」をダブルクリックするとプロパティのウィンドウが表示されます。［全般］タブの［サービスの状態：］にある［開始(S)］ボタンをクリックしてください。［サービスの状態：開始］となったことを確認したら［OK］ボタンをクリックし，プロパティのウィンドウを閉じます。

コマンドプロンプトから開始する場合

「管理者として実行」で起動したコマンドプロンプトで「net start TP1ConnectorNETTRS」を実行します。

トランザクションリカバリサービスは，アプリケーションを実行する前に起動する必要があります。トランザクションリカバリサービスが起動していない状態でアプリケーションを実行すると，トランザクション内での最初のサービス要求時にエラーが発生します。

1.2.17　MSDTC連携機能を使用している場合の障害発生時の運用

MSDTC連携機能を使用している場合に障害が発生したときは，障害が回復されるとトランザクションリカバリサービスがすべてのトランザクションを自動的に回復します。しかし，次に示す条件を両方とも満たす場合は，MSDTCが管理するトランザクションとOpenTP1が管理するトランザクションを強制決着させてください。

コミットの準備が完了した状態で障害が発生して，長時間に渡って復旧できないなどの状態

トランザクションを強制的にコミットまたはロールバックしてMSDTCやOpenTP1が使用するリソースを解放する必要がある状態

＜この項の構成＞

(1)　トランザクションを強制決着させる方法

(2)　トランザクションを強制決着させる際の運用方法

(1)　トランザクションを強制決着させる方法

MSDTCが管理するトランザクションとOpenTP1が管理するトランザクションを強制決着させる方法について説明します。

(a)　MSDTCが管理するトランザクションを強制決着させる方法

dcomcnfgコマンドを実行して［コンポーネント サービス］を起動し，［コンポーネント サービス］－［コンピュータ］－［マイコンピュータ］－［分散トランザクション コーディネータ］－［トランザクションの一覧］画面で行います。詳細については，Microsoft 管理コンソールのヘルプを参照してください。

(b)　OpenTP1が管理するトランザクションを強制決着させる方法

TP1/Server Baseのトランザクションを強制決着させる場合は，xarforceコマンドを使用します。詳細については，マニュアル「OpenTP1 運用と操作」を参照してください。

TP1/LiNKでトランザクションを強制決着させる場合は，［TP1/LiNK XAリソースサービス管理］ダイアログボックスで行います。詳細については，マニュアル「TP1/LiNK 使用の手引」を参照してください。

(2)　トランザクションを強制決着させる際の運用方法

単一フェーズコミット最適化を使用していない場合は，次に示すIDを照合して，各トランザクションのステータスに応じてトランザクションを強制決着させてください。

MSDTCが管理するトランザクションで表示される［トランザクションの一覧］画面の［作業IDユニット］に表示されるID

TP1/Server Baseのxarlsコマンドで表示されるDID，またはTP1/LiNKの［TP1/LiNK XAリソースサービス管理］ダイアログボックスに表示されるDID

次に示す場合は，あらかじめ決めておいた運用手順に従ってトランザクションを強制決着させてください。ただしこの場合，MSDTCが管理するトランザクションとOpenTP1が管理するトランザクションの整合性は保証されないおそれがあります。

MSDTCまたはOpenTP1に障害が発生したことが原因となってIDの照合ができない場合

単一フェーズコミット最適化を使用している場合※

注※

TP1/Server Baseの場合はxarlsコマンドの実行，TP1/LiNKの場合は［TP1/LiNK XAリソースサービス管理］ダイアログボックスで，DIDを表示できないことがあります。このため，IDを照合して，各トランザクションのステータスに応じてトランザクションを強制決着させることができません。

1.3　TCP/IP通信機能

Connector .NETは，Client .NETを通してTCP/IP通信機能を使用できます。TCP/IP通信機能を使用すると，TCP/IPプロトコルによってOpenTP1のMHPやOpenTP1以外の他システムとメッセージの送受信ができます。

Connector .NETを使用したTCP/IP通信では，コネクションプーリング機能およびバッファプーリング機能が利用できます。TCP/IP通信の要求インタフェースには，インデクスドレコードを使用します。

Connector .NETを使用したTCP/IP通信機能は，Connector .NET側からOpenTP1のMHPや他システムに対してTCP/IPの物理コネクションを確立する場合にだけ利用できます。OpenTP1のMHPや他システムからのコネクション確立要求を受け付ける形態では利用できません。

＜この節の構成＞

1.3.1　通信形態

1.3.2　TCP/IP通信機能を使用する場合に関連する定義

1.3.3　物理コネクションの管理

1.3.4　TCP/IP通信機能を使用する場合の注意事項

1.3.1　通信形態

TCP/IP通信機能を使用したメッセージの送受信には，次の3種類があります。

メッセージの一方送信

メッセージの同期送受信

メッセージの一方受信

＜この項の構成＞

(1)　メッセージの一方送信

(2)　メッセージの同期送受信

(3)　メッセージの一方受信

(1)　メッセージの一方送信

OpenTP1のMHPや他システムに対してデータを一方送信する形態です。

この通信形態を使用する場合は，TcpipInfoクラスのFlagsプロパティにTCPIP_SENDフラグを指定してください。

(2)　メッセージの同期送受信

OpenTP1のMHPや他システムとデータを同期送受信する形態です。

この通信形態を使用する場合は，TcpipInfoクラスのFlagsプロパティにTCPIP_SENDRECVフラグを指定してください。

(3)　メッセージの一方受信

一方送信または同期送受信で確立したOpenTP1のMHPや他システムとの物理コネクションを使用して，データを一方受信する形態です。受信用ソケットを開設する一方受信はサポートされません。

この通信形態を使用する場合は，TcpipInfoクラスのFlagsプロパティにTCPIP_RECVフラグを指定していて，かつ事前に一方送信または同期送受信の通信形態で物理コネクションが確立されている必要があります。

1.3.2　TCP/IP通信機能を使用する場合に関連する定義

TCP/IP通信機能を使用する場合，Connector .NETのプロファイルに指定するClient .NET構成定義で，<tcpip>要素を次のように指定しておく必要があります。

表1-6　TCP/IP通信機能を使用する場合の<tcpip>要素の指定値

属性 | 指定値
use属性 | true※
type属性 | sendrecv※
sendHost属性 | 接続先ホスト名
sendPort属性 | 接続先ポート番号
openPortAtRecv属性 | true※

注※

これらの値以外を指定した場合の動作は保証しません。

HostAの20000番ポートへ接続する場合の指定例を示します。

【指定例】

…
<tcpip use="true"
      type="sendrecv"
      sendHost="HostA"
      sendPort="20000"
      openPortAtRecv="true" />
…

なお，接続先が複数ある場合は，接続先数分のプロファイルが必要です。そのため，Client .NET構成定義のプロファイルを複数作成して，それぞれのプロファイルを使用するConnector .NET構成定義のプロファイルを作成してください。

1.3.3　物理コネクションの管理

物理コネクションは，次に示す規則で管理されます。

TcpipConnectionオブジェクト取得時に，コネクションプールから取得されないで新しくコネクションが生成された場合，その時点では物理コネクションは確立されません。

TcpipConnectionクラスのExecuteメソッドが発行された時点で物理コネクションが確立されていない場合は，物理コネクションが確立されたあとに通信が行われ，通信後も物理コネクションは維持されます。

TcpipConnectionクラスのDisconnectメソッドが発行された時点で，接続先との物理コネクションが解放されます。

TcpipConnectionオブジェクトがコネクションプールに戻されるときは，Connector .NET構成定義の<tcpip>要素でkeepAlive属性に指定した値によって，物理コネクションを維持するかどうかが決まります。

trueを指定したとき
物理コネクションを維持したまま，コネクションプールに戻されます。

falseを指定したとき
すべての接続先との物理コネクションが解放されたあとで，コネクションプールに戻されます。

TcpipConnectionクラスのDisposeメソッド発行時に，TcpipConnectionオブジェクトがコネクションプールに戻されないで破棄される場合は，Connector .NET構成定義の<tcpip>要素でkeepAlive属性に指定した値に関係なく，接続先との物理コネクションが解放されます。

1.3.4　TCP/IP通信機能を使用する場合の注意事項

Connector .NETでTCP/IP通信機能を使用する場合の注意事項を次に示します。なお，実際の通信はTP1Clientオブジェクトが行うため，マニュアル「TP1/Client for .NET Framework 使用の手引」のTCP/IP通信機能の注意事項もあわせて参照してください。

TP1ConnectionManagerクラスのGetTcpipConnectionメソッドでTcpipConnectionオブジェクトを取得した直後は，物理コネクションの状態が不明なため，一方受信での通信はしないでください。

物理コネクションが確立されていない状態や切断された状態で一方受信での通信をした場合は，予期しないで受信ソケットが開設されてしまいます。そのため，一方受信の通信で例外が発生した場合は，必ずTcpipConnectionクラスのDisconnectメソッドを発行してください。

物理コネクションを維持した状態でコネクションをコネクションプールに戻す運用をする場合は，プーリングされたコネクション数分の物理コネクションが長時間維持されます。このような物理コネクションの解放は，接続先システム側で監視します。接続先システムがTP1/NET/TCP/IPの場合は，無通信状態監視機能を使用してください。無通信状態監視については，マニュアル「OpenTP1 プロトコル TP1/NET/TCP/IP編」を参照してください。
長時間維持された物理コネクションをConnector .NET側で解放するためには，Connector .NETのアセンブリをロードしているアプリケーションドメインを解放する必要があります。このため，ASP.NETでサービスを利用している場合は，IISを停止する，ワーカープロセスのリサイクル機能によって定期的にプロセスを停止するなどの運用が必要です。
接続先システム側での監視および解放，ならびにワーカープロセスのリサイクルができない場合は，コネクションをコネクションプールに戻す前に必ず物理コネクションを解放する運用にしてください。

コネクションプール，およびConnector .NETの内部で保持されるTP1Clientオブジェクトは，TP1ConnectionオブジェクトとTcpipConnectionオブジェクトが共有します。このため，RPCで使用する構成定義プロファイルとTCP/IP通信で使用する構成定義プロファイルを，別々に定義してください。同じ構成定義プロファイルを使用した場合，TcpipConnectionクラスのDisconnectメソッドの発行によって常設コネクションが解放されてしまうなど，相互の動作に影響する場合があります。

コネクションプール数や最大同時接続数を見積もる場合は，RPCで利用するTP1Connectionオブジェクトのコネクションプール数や最大同時接続数と，TCP/IP通信で利用するTcpipConnectionオブジェクトのコネクションプール数や最大同時接続数を合わせた値で見積もってください。RPCとTCP/IP通信とで別々にコネクションプール占有数を制限したい場合は，それぞれの構成定義プロファイルで<occupation>要素のpooled属性を指定してください。

バッファプーリング機能を使用してTCP/IP通信を行う場合，TcpipConnectionクラスのExecuteメソッドを発行して送受信できるデータ長は，1回のメソッド発行につき最大1メガバイトになります。バッファプーリング機能を使用しない場合は，データ長に制限はありません。

1.4　コネクションプーリング機能

＜この節の構成＞

1.4.1　コネクションの生成とプーリング

1.4.2　構成定義での指定

1.4.3　コネクションプーリング機能を使用したアプリケーションの実行

1.4.1　コネクションの生成とプーリング

Connector .NETは，Client .NETが提供するTP1Clientクラスのインスタンスにハンドルを関連づけて管理します。TP1Clientクラスのインスタンスに関連づけられたハンドルのことを，コネクションと呼びます。

＜この項の構成＞

(1)　コネクションの生成

(2)　コネクションのプーリング

(1)　コネクションの生成

コネクションの生成の概要を，次の図に示します。

図1-21　コネクションの生成

注※

実際のコネクション制御は，RPCの通信形態やTCP/IP通信時の構成定義によって異なります。

Connector .NETのアプリケーションからTP1ConnectionManagerクラスのGetConnectionメソッド（またはGetTcpipConnectionメソッド）が呼び出されると，TP1Clientクラスのインスタンスが生成されます。
このとき，アプリケーションのプロファイルIDに指定されたClient .NET構成定義に基づいて，TP1ClientクラスのOpenRpcメソッドが呼び出され，RPC環境が初期化されます。

TP1ConnectorManagerクラスは，コネクション（TP1ConnectionオブジェクトまたはTcpipConnectionオブジェクト）を生成します。

GetConnectionメソッド（またはGetTcpipConnectionメソッド）にコネクションを返します。

アプリケーションは，コネクションに対してRPC要求（またはTCP/IP通信）を実行します。

(2)　コネクションのプーリング

Connector .NETでは，資源を効率的に使用するために，一度生成されたコネクションをプーリングできます。この領域を，コネクションプールと呼びます。コネクションプールは，最初にアプリケーションからGetConnectionメソッド（またはGetTcpipConnectionメソッド）が呼び出されたときにアプリケーションドメインごとに生成され，コネクションが解放されるとTP1Clientクラスのインスタンスがプーリングされます。

コネクションプーリング機能の概要を，次の図に示します。

図1-22　コネクションのプーリング

アプリケーションからTP1ConnectionクラスのDisposeメソッドが呼び出されると，使用していたコネクションが解放されます。

使用していたコネクションは，コネクションプールにプーリングされます。

GetConnectionメソッド（またはGetTcpipConnectionメソッド）が呼び出された時に，コネクションプール内に同じプロファイルID（Client .NET構成定義のプロファイルID）のコネクションが存在する場合は，新たにTP1Clientクラスのインスタンスを生成しないで，コネクションプール内のコネクションを取得します。

図1-23　コネクションプールからのコネクションの取得

注※

実際のコネクション制御は，RPCの通信形態やTCP/IP通信時の構成定義によって異なります。

アプリケーションからTP1ConnectionManagerクラスのGetConnectionメソッド（またはGetTcpipConnectionメソッド）が呼び出されます。
このとき，アプリケーションのプロファイルIDで指定されたClient .NET構成定義に基づいて，TP1ClientクラスのOpenRpcメソッドが呼び出され，RPC環境が初期化されます。

コネクションプール内に同じプロファイルIDのコネクション（TP1ConnectionオブジェクトまたはTcpipConnectionオブジェクト）が存在するため，TP1ConnectorManagerクラスはコネクションプールからコネクションを取得します。

GetConnectionメソッド（またはGetTcpipConnectionメソッド）にコネクションを返します。

アプリケーションは，コネクションに対してRPC要求（またはTCP/IP通信）を実行します。

1.4.2　構成定義での指定

構成定義で，次の値を指定します。

最大同時使用コネクション数

最大コネクションプール数

プロファイル単位の最大占有コネクション数

なお，ASP.NETではWebアプリケーションごとにアプリケーションドメインが生成されるため，最大コネクションプール数，最大同時使用コネクション数，およびプロファイル単位の最大占有コネクション数は，アプリケーションごとに見積もってください。

OpenTP1のリモートAPI機能でスタティックコネクションスケジュールモードを使用する場合，全ノードの全アプリケーションで設定する最大同時コネクション数（connection要素のactive属性）の合計がrapサーバの数以下となるようにしてください。コネクションの合計数がrapサーバの数より多い場合は，サービス要求時に待ち状態となるときがあります。

リモートAPI機能のダイナミックコネクションスケジュールモードを使用する場合は，最大同時コネクション数の指定には特に制限はありません。

リモートAPI機能の詳細については，マニュアル「OpenTP1 解説」を参照してください。

構成定義で指定する項目を，次の図に示します。

図1-24　構成定義の指定（コネクションプーリング機能）

コネクションの総数が最大同時使用コネクション数の指定値を超えた場合，TP1ConnectionクラスのDisposeメソッドが呼び出されて，ほかのコネクションが解放されるまでは，新たにコネクションを生成できません。また，最大コネクションプール数の指定値を超えてコネクションがプーリングされたときは，TP1ClientクラスのCloseRpcメソッドが呼び出され，古いTP1Clientクラスのインスタンスから破棄されます。

構成定義の詳細については，「2.　構成定義」の「connection」および「occupation」を参照してください。

1.4.3　コネクションプーリング機能を使用したアプリケーションの実行

コネクションプーリング機能を使用したアプリケーションの実行例を示します。なお，この実行例で使用されているコネクションのプロファイルIDは次のとおりです。

プロファイルID1

窓口となるOpenTP1のホスト名：hostA

窓口となるOpenTP1のポート番号：10020

RPCの通信形態：rapサービス

プロファイルID2

窓口となるOpenTP1のホスト名：hostB

窓口となるOpenTP1のポート番号：10010

RPCの通信形態：スケジューラサービス

図1-25　コネクションプーリング機能を使用したアプリケーションの実行例

注意

コネクションプールは必ずアプリケーションドメイン単位に生成されます。プロセス単位で生成されることはありません。

1.5　バッファプーリング機能

バッファプーリング機能は，RPC要求およびTCP/IP通信に使用するメッセージを格納するバッファ（バイト配列）をプーリングする機能です。

RPC要求やTCP/IP通信を頻繁に実行するアプリケーションでは，サイズの大きなバッファの生成および破棄が繰り返されて，ガベージコレクションによる性能への影響が大きくなります。そのような場合に，バッファプーリング機能でバッファをプーリングすると，バッファの生成や破棄を少なくできます。これによってガベージコレクションの頻度が下がり，性能が向上します。

＜この節の構成＞

1.5.1　バッファプールとメッセージバッファ

1.5.2　構成定義での指定

1.5.3　バッファの取得と解放

1.5.4　インデクスドレコード使用時のバッファの取得と解放

1.5.5　クライアントスタブ使用時のバッファの取得と解放

1.5.6　バッファプーリング機能を使用したアプリケーションの実行

1.5.7　バッファサイズの見積もり方法

1.5.1　バッファプールとメッセージバッファ

＜この項の構成＞

(1)　バッファプール

(2)　メッセージバッファ

(1)　バッファプール

バッファプーリング機能を使用すると，生成されたバッファは，同じバッファサイズごとにプーリングされます。同じバッファサイズのバッファを管理するプールのことを，バッファプールと呼びます。なお，バッファプーリング機能を使用するとき，TP1ConnectionManagerクラスは，最大サイズ（1048576バイト）のバッファプールを必ず自動的に生成します。ただし，RPC送受信メッセージの最大長拡張機能を使用する場合，最大サイズには<option>要素のmaxMessageSize属性で指定した値（×1048576バイト）が設定されます。

バッファプール管理の構成例を，次の図に示します。

図1-26　バッファプール管理の構成例

(2)　メッセージバッファ

RPC要求およびTCP/IP通信にインデクスドレコードを使用するアプリケーションでは，バッファプールから取得したバッファをTP1ConnectionManagerクラスが生成するMessageBufferインスタンス（メッセージバッファ）に保持します。メッセージバッファは，インデクスドレコードのメッセージ用のレコード要素として使用します。

なお，RPC要求にクライアントスタブを使用する場合は，Connector .NETの内部でTP1ConnectionManagerクラスが生成するバッファプールを使用するため，アプリケーションが意識することなくバッファプーリング機能を利用できます。

1.5.2　構成定義での指定

構成定義で，次の値を指定します。なお，構成定義はRPCインタフェースごとに指定してください。

各プロファイルで異なるバッファプールを指定した場合は，バッファプールはプロファイルごとに生成されます。

バッファプーリング機能の使用有無
デフォルトでは，バッファプーリング機能は使用しません。

プーリングされるバッファのバッファサイズと，格納されるバッファ数
バッファプールごとに設定します。RPC要求を頻繁に実行するメッセージのメッセージ長やメッセージの使用頻度に合わせて指定することで，プーリングしてあるバッファを有効に使用できます。

最大サイズのバッファプールに格納されるバッファ数

ASP.NETではWebアプリケーションごとにアプリケーションドメインが生成されるため，プーリングされるバッファのバッファサイズと格納されるバッファ数，最大サイズのバッファプールに格納されるバッファ数はアプリケーションごとに見積もってください。

構成定義の詳細については，「2.　構成定義」の「buffer」，「largestBufferPool」，および「bufferPool」を参照してください。

1.5.3　バッファの取得と解放

＜この項の構成＞

(1)　バッファの取得

(2)　バッファの解放

(1)　バッファの取得

TP1ConnectionManagerクラスは，GetMessageBufferメソッドのパラメタに指定されたメッセージ長を保持できるメッセージバッファを生成します。

バッファ取得時のバッファプールの構造を，次の図に示します。

図1-27　バッファ取得時のバッファプールの構造

メッセージバッファは，TP1ConnectionManagerクラスがプール管理するバッファを内部に取得します。取得するバッファは，GetMessageBufferメソッドのパラメタに指定されたメッセージ長を保持できる，最も小さいサイズのバッファです。

指定されたメッセージ長を保持できる，最も小さいサイズのバッファがバッファプール内に存在しない場合は，バッファを新規生成してメッセージバッファを生成します。この場合，バッファプールのバッファが解放されるまでは，GetMessageBufferメソッドが呼び出されるたびにバッファを新規生成し，メッセージバッファを生成します。

注意

GetMessageBufferメソッドに，構成定義で指定したバッファプールサイズの最大値を超えるサイズが指定された場合は，最大サイズ（1048576バイト）のバッファプールからバッファを取得します。ただし，このメッセージバッファが最大サイズのバッファを取得するのは，処理を続行させるためです。アプリケーションが最大サイズのバッファを何度も使い続けると，性能およびリソースへの影響が大きくなります。そのため，構成定義で指定するバッファサイズの値は，アプリケーションの用途に合わせて見積もってください。

なお，RPC送受信メッセージの最大長拡張機能を使用する場合は，GetMessageBufferメソッドに構成定義で指定したバッファプールサイズの最大値を超えるサイズが指定されたときでも，<option>要素のmaxMessageSize属性で指定した値（×1048576バイト）が設定されます。

(2)　バッファの解放

バッファ解放時のバッファプールの構造を，次の図に示します。

図1-28　バッファ解放時のバッファプールの構造

バッファを解放するときは，MessageBufferクラスのReleaseMessageBufferメソッドを呼び出します。バッファを格納するバッファプールに空きがあれば，バッファはバッファプールに戻ります。バッファプールが満杯のときは，バッファはプーリングされないで破棄されます。

1.5.4　インデクスドレコード使用時のバッファの取得と解放

＜この項の構成＞

(1)　バッファの取得

(2)　バッファの解放

(1)　バッファの取得

RPC要求およびTCP/IP通信にインデクスドレコードを使用する場合のバッファの取得について，次の図に示します。

図1-29　インデクスドレコード使用時のバッファの取得

アプリケーションからTP1ConnectionManagerクラスのGetMessageBufferメソッドを呼び出して，メッセージバッファを生成します。
GetMessageBufferメソッドのパラメタには，メッセージバッファに取得するバッファに設定する入力メッセージまたは応答メッセージのメッセージ長を指定してください。

メッセージバッファが保持するバッファに，入力メッセージを設定します。次のどちらかの方法で設定してください。

MessageBufferクラスのAppendメソッドを呼び出して，入力メッセージ（バイト配列）を設定してください。

MessageBufferクラスのBufferプロパティで，バッファに直接入力メッセージを設定します。また，MessageLengthプロパティでメッセージ長を設定してください。

IndexedRecordクラスのAddメソッドを呼び出し，インデクスドレコードのレコード要素としてメッセージバッファを設定してください。※

TP1ConnectionクラスまたはTcpipConnectionクラスのExecuteメソッドを呼び出し，RPCまたはTCP/IP通信を実行します。

注※

入力用インデクスドレコードのレコード要素には，複数のメッセージバッファを設定することもできます。その場合は，メッセージ長の合計は1から1048576までの範囲で指定してください。ただし，RPC送受信メッセージの最大長拡張機能を使用する場合，最大サイズには<option>要素のmaxMessageSize属性で指定した値（×1048576バイト）が設定されます。

また，インデクスドレコードに設定したバッファのほかに，これらのメッセージ長の合計長のメッセージが格納できるバッファがRPCまたはTCP/IP通信の実行時にConnector .NETの内部で使用されます。そのため，バッファ数およびバッファサイズを見積もるときはこの分のバッファも考慮してください。

なお，出力用インデクスドレコードのレコード要素に設定できるメッセージバッファは一つだけです。

(2)　バッファの解放

RPC要求またはTCP/IP通信にインデクスドレコードを使用する場合のバッファの解放について，次の図に示します。

図1-30　インデクスドレコード使用時のバッファの解放

RPC要求またはTCP/IP通信が実行されると，TP1ConnectionクラスまたはTcpipConnectionクラスのExecuteメソッドは，インデクスドレコードに戻り値を返します。

アプリケーションが，インデクスドレコードからメッセージバッファを取り出します。

MessageBufferクラスのBufferプロパティで，応答メッセージを設定します。また，MessageLengthプロパティでメッセージ長を取得してください。

MessageBufferクラスのReleaseMessageBufferメソッドを呼び出すと，メッセージバッファに保持されているバッファがバッファプールに戻されます。
ReleaseMessageBufferメソッドを呼び出したあとは，メッセージバッファのバッファにはアクセスできません。

1.5.5　クライアントスタブ使用時のバッファの取得と解放

＜この項の構成＞

(1)　バッファの取得

(2)　バッファの解放

(1)　バッファの取得

RPC要求にクライアントスタブを使用する場合のバッファの取得について，次の図に示します。

図1-31　クライアントスタブ使用時のバッファの取得

アプリケーションがクライアントスタブのサービスメソッドを呼び出すと，Connector .NETは入力メッセージ長を計算します。

Connector .NETは，バッファプールから入力メッセージ用のバッファを取得します。

取得した入力メッセージ用のバッファに，カスタムレコードまたは入力パラメタの内容をコピーします。

Client .NETのCallメソッドを呼び出します。

(2)　バッファの解放

RPC要求にクライアントスタブを使用する場合のバッファの解放について，次の図に示します。

図1-32　クライアントスタブ使用時のバッファの解放

Client .NETのCallメソッドを呼び出すと，Client .NETはバッファプールから応答メッセージ用のバッファを取得して受信処理をします。

Connector .NETは，応答メッセージを出力用のカスタムレコードまたは出力パラメタにコピーします。

応答メッセージが格納されたバッファを，バッファプールに戻します。

1.5.6　バッファプーリング機能を使用したアプリケーションの実行

バッファプーリング機能を使用した場合のアプリケーションの実行例を示します。

図1-33　バッファプーリング機能を使用した場合のアプリケーションの実行例

注意

バッファプールは必ずアプリケーションドメイン単位に生成されます。プロセス単位で生成されることはありません。

1.5.7　バッファサイズの見積もり方法

RPC要求にクライアントスタブを使用する場合，入出力パラメタやカスタムレコードクラスと，入出力メッセージの間の変換をConnector .NETが行うため，Connector .NETのアプリケーションは直接バッファ長を意識する必要はありません。しかし，バッファプーリング機能使用時のバッファサイズとプール数を適切に設定するために，入力メッセージ長および応答メッセージ長の値を見積もっておく必要があります。

＜この項の構成＞

(1)　.NETインタフェース定義から生成されたクライアントスタブを使用する場合

(2)　サービス定義から生成されたカスタムレコードクラスを使用する場合

(1)　.NETインタフェース定義から生成されたクライアントスタブを使用する場合

(a)　データ型ごとの合計値を計算する

次に示す計算式を用いて，入力および出力で使用するデータ型ごとの合計値を計算してください。

入力メッセージ長＝メソッドの入力パラメタおよび参照パラメタの最大データ長の合計＋512

応答メッセージ長＝メソッドの出力パラメタ，参照パラメタ，および戻り値の最大データ長の合計＋512

計算式に代入する値を，次の表に示します。

表1-7　計算式に代入する値（.NETインタフェース定義）

パラメタのデータ型 | メッセージ上のサイズの最大値（バイト）
System.Byte | 1
System.Int16 | 3
System.Int32 | 7
System.Int64 | 15
System.String | 格納された文字数×2＋13
System.Byte[] | a＋11
System.Int16[] | 2×a＋11
System.Int32[] | 4×a＋11
System.Int64[] | 8×a＋11
System.String[] | Σ（格納された文字数×2＋13）＋11
TP1ユーザ構造体 | 各メンバの最大長の合計＋4
TP1ユーザ構造体配列 | Σ（各メンバの最大長の合計＋4）＋11

（凡例）

a：配列の要素数

注

スタブによって自動的に調整されるサイズを含みます。

(b)　データトレースを使用する

Client .NETのトラブルシュート機能であるデータトレースを使用して，実際に送受信されたメッセージ長を確認できます。データトレースの詳細については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

(2)　サービス定義から生成されたカスタムレコードクラスを使用する場合

(a)　データ型ごとの合計値を計算する

次に示す計算式を用いて，入力および出力で使用するデータ型ごとの合計値を計算してください。

入力メッセージ長＝データ型定義の各メンバのデータ長の合計

応答メッセージ長＝データ型定義の各メンバのデータ長の合計

計算式に代入する値を，次の表に示します。

表1-8　計算式に代入する値（サービス定義）

データ型定義のメンバのデータ型 | メッセージ上のサイズ（バイト）
char | 1
short | 2
int | 4
long | 4
char[a] | 1×a
char[a][b] | a×b
short[a] | 2×a
int[a] | 4×a
long[a] | 4×a
byte[a] | 1×a
struct | 構造体の各メンバのサイズの合計
struct[a] | 構造体の各メンバのサイズの合計×a

（凡例）

a，b：配列の要素数

注

可変長構造体配列の場合，配列の最大要素数で見積もるようにしてください。

(b)　カスタムレコードクラスのソースコードを確認する

カスタムレコードクラスのソースコードのprivate constフィールド_lengthを参照して，計算後のメッセージ上のサイズが確認できます。

(c)　クライアントスタブ生成コマンド（サービス定義用）を実行する

カスタムレコードクラスごとに必要なバッファサイズは，クライアントスタブ生成コマンド（サービス定義用）（spp2cstub）に-bオプションを指定して実行することで確認できます。運用コマンドの詳細については，「4.　運用コマンド」の「spp2cstub（クライアントスタブ生成コマンド（サービス定義用））」を参照してください。

1.6　TSP自動生成機能

＜この節の構成＞

1.6.1　TSP自動生成機能の概要

1.6.2　TSP自動生成機能の運用

1.6.3　TSPの動作設定

1.6.4　ASP.NET XML Webサービスの動作設定

1.6.5　パラメタの対応づけ規則

1.6.1　TSP自動生成機能の概要

Connector .NETは，.NETインタフェース定義またはサービス定義からTP1 Service Proxy（TSP）を自動生成できます。

TSPは，コネクションを意識しないでOpenTP1のサービスを利用できるプロキシクラスです。OpenTP1のサービスを利用する操作を仮想化することで，WebサービスやWebアプリケーションなどからOpenTP1のサービスが利用できるようになります。

また，OpenTP1上のサービスをASP.NET XML Webサービスとして公開するためのASP.NET XML Webサービスクラスを自動生成できます。これによって，SOAPプロトコルでOpenTP1のサービスを利用できるようになります。

＜この項の構成＞

(1)　入力情報と運用コマンド

(2)　生成されるファイル

(3)　TSPを実行するための環境および手順

(1)　入力情報と運用コマンド

サーバUAPの種別によって，TSP自動生成機能を使用するために用いるインタフェース情報および運用コマンドが異なります。次の表に，サーバUAPの種別ごとの入力情報と運用コマンドを示します。

表1-9　TSP自動生成機能を使用する際の入力情報と運用コマンド

サーバUAPの種別 | 入力元のインタフェース情報 | 運用コマンド
.NETインタフェース定義を利用したSPP.NET | .NETインタフェース定義 | TSP生成コマンド（.NETインタフェース定義用）（if2tsp）
SPP，または.NETインタフェース定義を利用しないSPP.NET | サービス定義 | TSP生成コマンド（サービス定義用）（spp2tsp）

(2)　生成されるファイル

TSP自動生成機能を使用すると，次のファイルが生成されます。

TSP実装クラス※1

クライアントスタブ※1

カスタムレコードクラス※1，※2

構成ファイル（App.config）

ASP.NET XML Webサービスのソースプログラムファイル（拡張子はasmx）

ASP.NET XML Webサービスのソースプログラムの分離コードファイル（拡張子はasmx.cs，asmx.vb，またはasmx.jsl）※1

注※1

これらのファイルは，C#，J#，およびVisual Basicの各プログラム言語で出力できます。

注※2

入力元のインタフェース情報がサービス定義の場合にだけ生成されます。

(3)　TSPを実行するための環境および手順

(a)　実行環境

TSP自動生成機能によって生成されたTSPを実行するためには，次の環境が必要です。

IIS 5.0以降

.NET Framework 2.0※1

Visual Studio※2

注※1

ASP.NETの実行環境が構築されている必要があります。

注※2

Visual Studio 2008では，J#を使用して開発できません。

(b)　実行手順

TSPを実行する手順を次に示します。

Visual Studioで，ASP.NET Webサービスのプロジェクトを作成します。

生成されたIIS仮想ディレクトリに対応するディレクトリに，自動生成されたファイルをコピーし，プロジェクトに登録します。

プロジェクトをビルドします。

1.6.2　TSP自動生成機能の運用

＜この項の構成＞

(1)　サーバが.NETインタフェース定義を利用したSPP.NETの場合

(2)　サーバがSPP，または.NETインタフェース定義を利用しないSPP.NETの場合

(1)　サーバが.NETインタフェース定義を利用したSPP.NETの場合

サーバが.NETインタフェース定義を利用したSPP.NETの場合の，TSP自動生成機能使用時の流れを次の図に示します。

図1-34　TSP自動生成機能使用時の流れ（サーバが.NETインタフェース定義を利用したSPP.NETの場合）

TSP生成コマンド（.NETインタフェース定義用）（if2tsp）を実行し，TSPを生成します。オプションで，ASP.NET XML Webサービスクラスを同時に生成できます。

生成されたファイルを，IIS仮想ディレクトリに配置します。
詳細については，「1.6.1(3)　TSPを実行するための環境および手順」を参照してください。

ASP.NET WebサービスまたはWebアプリケーションの実行時に，IIS仮想ディレクトリを読み込みます。

ASP.NET XML WebサービスまたはWebアプリケーションが利用できます。
また，ASP.NET XML Webサービスとして公開されたWSDLは，Webブラウザから「〈公開されたXML WebサービスのURL〉?wsdl」を指定してアクセスすることで参照できます。

(2)　サーバがSPP，または.NETインタフェース定義を利用しないSPP.NETの場合

サーバがSPP，または.NETインタフェース定義を利用しないSPP.NETの場合の，TSP自動生成機能使用時の流れを次の図に示します。

図1-35　TSP自動生成機能使用時の流れ（サーバがSPP，または.NETインタフェース定義を利用しないSPP.NETの場合）

TSP生成コマンド（サービス定義用）（spp2tsp）を実行し，TSPを生成します。オプションで，ASP.NET XML Webサービスクラスを同時に生成できます。

生成されたファイルを，IIS仮想ディレクトリに配置します。
詳細については，「1.6.1(3)　TSPを実行するための環境および手順」を参照してください。

ASP.NET XML WebサービスまたはWebアプリケーションの実行時に，IIS仮想ディレクトリを読み込みます。

ASP.NET XML WebサービスまたはWebアプリケーションが利用できます。
また，ASP.NET XML Webサービスとして公開されたWSDLは，Webブラウザから「〈公開されたXML WebサービスのURL〉?wsdl」を指定してアクセスすることで参照できます。

1.6.3　TSPの動作設定

＜この項の構成＞

(1)　TSP実装クラスの利用方法

(2)　TSP実装クラスのプロパティの詳細

(3)　ASP.NET構成ファイルの詳細

(1)　TSP実装クラスの利用方法

TSP実装クラスは，ASP.NET XML WebサービスおよびASP.NET Webアプリケーションを含む，任意のアプリケーションから利用できます。

TSPの動作は，次の表に示すTSP実装クラスのプロパティまたはASP.NET構成ファイルで変更します。自動生成されたTSP実装クラスのソースコードは変更しないでください。

表1-10　TSPの実行時に指定できる項目

指定個所 | 指定できる項目
プロパティ | RPC要求先のサービスグループ名
Connector .NET構成定義のプロファイルID
RPC形態
RPC要求の最大応答監視時間
ASP.NET構成ファイル | RPC要求先のサービスグループ名
Connector .NET構成定義のプロファイルID
RPC要求の最大応答監視時間（Webサービスメソッドごとに指定）

(2)　TSP実装クラスのプロパティの詳細

TSP実装クラスのプロパティの詳細を，次の表に示します。

表1-11　TSP実装クラスのプロパティの詳細

名称
説明
データ型

ServiceGroup※
RPC要求先のサービスグループ名を設定，および取得します。
System.String

ProfileID※
Connector .NET構成定義のプロファイルIDを設定，および取得します。
System.String

RpcFlags
RPC実行時のサービス呼び出し形態を設定，および取得します。RpcInfoクラスのDCNOFLAGSフィールド，またはDCRPC_NOREPLYフィールドを設定します。
それ以外の値が設定された場合は，次の例外が発生します。

Hitachi.OpenTP1.Connector.TP1ConnectorException

System.Int32

WatchTime※
RPCの形態が同期応答型RPCの場合に，SPP.NETにサービス要求を送ってからサービスの応答が返るまでの最大応答待ち時間（単位：秒）を設定および取得します。
-1，および0～65535までの整数が設定できます。-1を指定した場合は，対応するClient .NET構成定義の設定に従います。
－

（凡例）

－：該当しません。

注※

プロパティの設定値が不正な場合，TSP実装クラスのサービスメソッドが呼び出された時点でTP1ConnectorExceptionが発生します。

(3)　ASP.NET構成ファイルの詳細

(a)　構成定義名と設定値

ASP.NET構成ファイルを変更してTSPの動作プロパティを設定するときは，<appSettings>要素の子要素に設定します。構成定義名と設定値を次の表に示します。

表1-12　構成定義の設定（TSP）

構成定義名
指定内容
設定値※2
《デフォルト値》

〈TSP実装クラス名〉.ServiceGroup※1
RPC要求先のサービスグループ名を指定します。
31文字以内の識別子
《TSP生成コマンドで指定したサービスグループ名》

〈TSP実装クラス名〉.ProfileId※1
Connector .NET構成定義のプロファイルIDを指定します。
文字列
《空文字》

〈TSP実装クラス名〉.〈サービス名〉.WatchTime※1
RPC要求時の最大応答監視時間を，秒単位で指定します。対応するサービスのRPC形態が同期応答型の場合にだけ有効です。
-1を指定した場合は，対応するClient .NET構成定義の設定に従います。
-1，0～65535の整数（単位：秒）
《-1》

注※1

〈TSP実装クラス名〉は，名前空間を含んだ完全限定名で指定します。

注※2

設定値が不正の場合は，デフォルト値が仮定されます。

(b)　構成定義の指定例

次の条件での構成定義の指定例を示します。

TSP実装クラス名：MyCompany.GYOUMU1WebService

サービスグループ名：SVGRP1

【指定例】

<configuration>
…
<appSettings>
  <add key="MyCompany.GYOUMU1WebService.ServiceGroup"
       value="SVGRP1" />
  <add key="MyCompany.GYOUMU1WebService.ProfileId"
       value="server1" />
  <add key="MyCompany.GYOUMU1WebService.PUTDATA.WatchTime"
       value="180" />
</appSettings>
…
</configuration>

1.6.4　ASP.NET XML Webサービスの動作設定

＜この項の構成＞

(1)　ASP.NET XML Webサービスの設定

(2)　ASP.NET XML Webサービスクラスのソースコード例

(1)　ASP.NET XML Webサービスの設定

属性を修正したい場合やデータを加工したい場合には，ASP.NET XML Webサービスのソースプログラムの分離コードファイルを変更します。

また，ASP.NET XML Webサービスの動作は，生成時に指定する運用コマンドのオプションでも設定できます。指定できるオプションを次の表に示します。

表1-13　ASP.NET XML Webサービスクラス生成時に運用コマンドのオプションで指定できる項目

オプション名 | パラメタ | 指定項目
-S | docまたはrpc | SOAP Body全体の書式
-x※ | literalまたはencoded | SOAPパラメタの書式指定スタイル
-w | ユーザ指定 | XML Webサービスの名前空間のURI
-N | ユーザ指定 | SOAP要求およびSOAP応答に関連づけられる名前空間のURI
-B | wsibp11またはnone | XML Webサービスクラスが準拠していることを示すWS-Iの仕様
-A | trueまたはfalse | Webサービス記述言語でのWS-I Basic Profile準拠の表示の有無

注※

このオプションは，SOAP Body全体の書式がDocumentの場合にだけ有効です。

(2)　ASP.NET XML Webサービスクラスのソースコード例

指定したオプションは，次のようにASP.NET XML Webサービスクラスのソースコードに反映されます。

【ASP.NET XML Webサービスクラスのソースコード例】

//-wで指定した値
[WebService(Namespace="http://tempuri.org/")]

//-Sにdocを指定した場合
[SoapDocumentService(SoapBindingUse.Literal)]
public class sampleClassWebService : WebService {

//-Bにnoneを指定した場合
[WebServiceBinding(ConformsTo=WsiProfiles.None,

//-Aにtrueを指定した場合
EmitConformanceClaims=true)]

//-xおよび-Nで指定した値
[SoapDocumentMethod(RequestNamespace="http://tempuri.org/",
ResponseNamespace="http://tempuri.org/")]
    [WebMethod()]
    public Record2 Service1(Record1 param0) {
        try {
            sampleClassProxy proxyClass =
              new sampleClassProxy();
            Record2 outRecord = new Record2();
            proxyClass.Service1(param0, outRecord);
            return outRecord;
        }
        catch (Hitachi.OpenTP1.TP1Exception tp1e) {
            System.Type t = tp1e.GetType();
            string className = t.FullName;
            string tp1eMessage = tp1e.Message;
            string errorCode =
              ("ErrorCode = " + tp1e.ErrorCode);
            string ErrorStr = (className + ": ");
            ErrorStr = (ErrorStr + tp1eMessage);
            ErrorStr = (ErrorStr + " ");
            ErrorStr = (ErrorStr + errorCode);
            throw new SoapException
              (ErrorStr, SoapException.ServerFaultCode, tp1e);
        }
    }
}

1.6.5　パラメタの対応づけ規則

.NETインタフェース定義，またはサービス定義およびデータ型定義で指定されたデータ型から，TSP実装クラスへのパラメタの対応づけ規則は，各定義のメソッドの宣言と同じです。ただし，ASP.NET XML Webサービスクラスについては，次のようになります。

〈.NETインタフェース定義から生成した場合〉

.NETインタフェース定義の各メソッドの宣言が，そのままASP.NET XML WebサービスクラスのWebサービスメソッドの宣言と同じになります。

〈サービス定義から生成した場合〉

サービス定義の各サービスで指定した入出力パラメタがカスタムレコードクラスに対応づけられ，ASP.NET XML WebサービスのWebサービスメソッドのパラメタには入力用カスタムレコードクラスが，戻り値には出力用カスタムレコードクラスが宣言されます。

参考

ASP.NET XML WebサービスクラスのパラメタからWSDLへの対応づけ規則については，.NET Frameworkのドキュメントを参照してください。なお，TSP自動生成コマンドで指定したSOAP Bodyおよびパラメタの書式指定によって，WSDLへのデータ型の対応づけ規則が変わります。

1.7　リソース監視機能

Connector .NETでは，リソース（コネクションおよびバッファ）の使用状況を監視できます。この機能を利用して，コネクションプールおよびバッファプールのチューニングができます。

＜この節の構成＞

1.7.1　リソース不足を通知する警告メッセージの出力

1.7.2　パフォーマンスカウンタへのリソース使用状況の出力

1.7.1　リソース不足を通知する警告メッセージの出力

構成定義で指定したコネクションおよびバッファに関するしきい値を超えた場合，警告メッセージがConnector .NETのログファイルに出力されます。これによって，コネクションおよびバッファの不足を事前に検知して，対処できます。Connector .NETのログファイルに警告メッセージを出力するには，<log>要素のlevel属性に1以上を指定してください。

監視される対象を次に示します。

最大同時使用コネクション数（<connection>要素のactive属性で指定）

最大バッファプール内のバッファ数（<largestBufferPool>要素のmaxCount属性で指定）

バッファプール内のバッファ数（<bufferPool>要素のmaxCount属性で指定）

上記の監視対象に対するしきい値は，<connection>要素，<largestBufferPool>要素，および<bufferPool>要素のthreshold属性で指定します。

なお，警告メッセージが出力された場合，上記の監視対象の不足が解消されるまで警告メッセージは出力されません。

この機能を使用する場合の構成定義の指定例を次に示します。この指定例では，最大同時使用コネクション数が80％，最大バッファプール内のバッファ数が100％，またはバッファプール内のバッファ数が120％を超えた場合に，警告メッセージが出力されます。

【指定例】

…
<connection pooled="10"
           active="20"
           threshold="80"
           timeout="180"/>
<log destination="c:¥temp¥connectorn" fileSize="1048576"
    level="1"/>
<buffer>
 <largestBufferPool maxCount="5"
                    threshold="100"/>
 <bufferPool size="10240"
             maxCount="10"
             threshold="120"/>
</buffer>
…

構成定義の詳細については，「2.　構成定義」の「connection」，「log」，「largestBufferPool」，および「bufferPool」を参照してください。

1.7.2　パフォーマンスカウンタへのリソース使用状況の出力

コネクションおよびバッファの使用状況をWindowsのパフォーマンスカウンタに出力することで，コネクションおよびバッファの使用状況を監視できます。パフォーマンスカウンタに出力されるコネクションおよびバッファの情報を次の表に示します。

表1-14　パフォーマンスカウンタに出力されるコネクションおよびバッファの情報

項目
名称
説明

カテゴリ名称
TP1/Connector.NET Connection
Connector .NETのコネクションに関するカウンタ

カウンタ名称
プールされているコネクション数
Pooled Connections
同一アプリケーションで，現時点でプールされているコネクション数

使用中のコネクション数
Active Connections
同一アプリケーションで，現時点で使用中のコネクションオブジェクトの数

コネクションの取得回数
GetConnection Total
同一アプリケーションで発行された，TP1ConnectionManagerクラスのGetConnectionメソッドおよびGetTcpipConnectionメソッドの合計発行回数（メソッドの実行結果の成否に関係なくカウントされた結果を表示）

コネクションが解放された回数
Dispose Total
同一アプリケーションで発行された，TP1ConnectionクラスのDisposeメソッドおよびTcpipConnectionクラスのDisposeメソッドの合計発行回数

プールからコネクションを取得した回数
Use of Pooled Connections Total
同一アプリケーションで，コネクションプールからコネクションが取得された合計回数

コネクションの生成回数
Created Connections
同一アプリケーションで，コネクションオブジェクトが新規に生成された回数

カテゴリ名称
TP1/Connector.NET Buffer
Connector .NETのバッファに関するカウンタ

カウンタ名称
プールされているバッファ数
Pooled Buffers
同一アプリケーションで，現時点でプールされているバッファ数（プロファイルIDおよびバッファサイズごとに表示）

使用中のバッファ数
Active Buffers
同一アプリケーションで，現時点で使用中のバッファ数（プロファイルIDおよびバッファサイズごとに表示）

バッファの取得回数
GetMessageBuffer Total
同一アプリケーションで発行された，TP1ConnectionManagerクラスのGetMessageBufferメソッドの合計発行回数（メソッドの実行結果の成否に関係なくカウントされた結果を，プロファイルIDおよびバッファサイズごとに表示）

バッファが解放された回数
ReleaseBuffer Total
同一アプリケーションで発行された，MessageBufferクラスのReleaseMessageBufferメソッドの合計発行回数（プロファイルIDおよびバッファサイズごとに表示）

プールからバッファを取得した回数
Use of Pooled Buffers Total
同一アプリケーションで，バッファプールからバッファを取得した合計回数（プロファイルIDおよびバッファサイズごとに表示）

バッファの生成回数
Created Buffers
同一アプリケーションで，新規に生成されたバッファの合計回数（プロファイルIDおよびバッファサイズごとに表示）

インスタンス名称

コネクション：アプリケーション名

バッファ：アプリケーション名_プロファイルID_バッファサイズ

現時点で起動中のConnector .NETを使用するアプリケーションの名称※

注※

コネクションおよびバッファに関するインスタンスは，次のメソッドが発行された時点で初期化され，アプリケーションを実行するプロセスが終了する時点で削除されます。

コネクションに関するインスタンス

TP1ConnectionManagerクラスのGetConnectionメソッド

TP1ConnectionManagerクラスのGetTcpipConnectionメソッド

バッファに関するインスタンス

TP1ConnectionManagerクラスのGetMessageBufferメソッド
web.configの変更などによってアプリケーションドメインだけが再構築された場合は，同じ名前のインスタンスでActive Connections，Pooled Connections，Active Buffers，およびPooled Buffersの値が0に初期化され，そのほかの値はプロセス終了まで継続して増加します。

パフォーマンスカウンタへのカテゴリおよびカウンタの登録・削除は，Connector .NETのインストールおよびアンインストール時に行われます。

パフォーマンスカウンタにコネクションおよびバッファの使用状況を出力するには，構成定義で<perfCounter>要素のuse属性にtrueを指定します。<perfCounter>要素は<common>要素の子要素として指定してください。構成定義での指定例を次に示します。

【指定例】

<hitachi.opentp1.connector>
<common>
 …
 <perfCounter use="true"/>
 …
</common>
</hitachi.opentp1.connector>

構成定義の詳細については，「2.　構成定義」の「perfCounter」を参照してください。

1.8　接続障害軽減機能

接続障害軽減機能は，あるコネクションが接続障害を検知したあとにほかのコネクションがその接続先に接続することを防止し，接続障害の発生頻度を軽減する機能です。

なお，この節では，コネクション確立時のすべての障害を「接続障害」，通信先となるホスト名またはIPアドレス，およびポート番号の組み合わせを「接続先」と表記します。

＜この節の構成＞

1.8.1　接続障害軽減機能の概要

1.8.2　構成定義での指定

1.8.3　接続障害の検知と復旧確認

1.8.4　接続障害軽減機能を使用する場合の注意事項

1.8.1　接続障害軽減機能の概要

接続障害軽減機能を使用すると，コネクションが接続障害を検知した場合に，同一アプリケーションドメイン内のほかのコネクションに対しても接続先ごとの障害情報を共有します。これによって，ほかのコネクションが障害となった接続先に対して接続することを防止し，接続障害の発生頻度を軽減します。接続障害情報はアプリケーションドメイン単位で共有されます。

接続障害軽減機能を使用しない場合，障害を検知していないコネクションは障害が発生した接続先に対しても接続を試みます。そのため，同じ接続先を使用するすべてのコネクションは，稼働中の接続先に切り替えるまでに一度ずつ同じ障害を検知するため時間が掛かります。接続障害軽減機能を使用した場合，一度障害を検知した接続先への接続を防止するため，接続先の切り替えに掛かる時間を短縮できることがあります。なお，障害発生時の接続先の切り替えに必要な時間は，接続障害の種類，構成定義の内容，OSの設定などによって異なります。接続障害軽減機能は，特に接続先ホストのハードウェアやOSの障害時に効果があります。ただし，接続先の一時的な障害（サーバ側でのlistenキューのオーバーフローなど）も接続障害情報に登録されるため，TP1/Serverが正常に稼働していても接続先の切り替えが行われることがあります。

障害を検知した接続先に対しては，一定時間経過ごとに接続を試みることができます。これを復旧確認動作といいます。

復旧確認動作は，障害となった接続先が定義されているコネクションのうち，一定時間経過後，最初にサービスを要求するコネクションが行います。復旧を確認し次第，サービスを要求するほかのコネクションを元の接続先に戻します。復旧確認動作を行うかどうかは，Connector .NET構成定義の<connection>要素のfailureCheckInterval属性で指定します。

接続障害軽減機能は，RPCで通信する場合にだけ使用できます。TCP/IP通信機能で通信する場合は使用できません。なお，この機能は次のRPCで使用できます。

リモートAPI機能を使用したRPC

ネームサービスを使用したRPC

スケジューラダイレクト機能を使用したRPC

1.8.2　構成定義での指定

接続障害軽減機能を使用するには，Connector .NET構成定義の<connection>要素のfailureInfoSharing属性にtrueを，failureCheckInterval属性に復旧確認間隔を指定します。復旧確認動作を行わない場合は，failureCheckInterval属性に0を指定します。

構成定義の詳細については，「2.　構成定義」の「connection」を参照してください。

この機能を使用する場合は，接続障害情報への接続先の登録および削除に関する情報をConnector .NETのログに出力します。これらの情報をログに出力する場合は，ログレベル2以上を指定してください。ログレベルの指定については，「2.　構成定義」の「log」を参照してください。

1.8.3　接続障害の検知と復旧確認

＜この項の構成＞

(1)　接続障害の検知の流れ

(2)　復旧確認動作の流れ

(1)　接続障害の検知の流れ

次の条件が定義された場合の接続障害の検知の流れを示します。

ネームサービスを使用したRPCで行う。

hostAで障害が発生している。

コネクションA，B，Cの順番に実行する。

プロファイルID1：hostA，hostBの順に接続先を選択する。

プロファイルID2：hostB，hostAの順に接続先を選択する。

図1-36　接続障害の検知の流れ

コネクションAは，構成定義に指定されたhostA:10000に接続する前に，接続障害情報にhostA:10000が登録されていないかどうかを確認します。

接続障害情報にhostA:10000が登録されていないため，接続を試みます。
hostA:10000で障害が発生したため，接続に失敗します。

接続障害情報にhostA:10000が登録されます。

コネクションAは，次の接続先として設定されているhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないかどうかを確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

コネクションBは，構成定義に指定されたhostA:10000に接続する前に，接続障害情報にhostA:10000が登録されていないかどうかを確認します。
接続障害情報にhostA:10000が登録されているため，hostA:10000には接続しません。

コネクションBは，次の接続先として設定されているhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないかどうかを確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

コネクションCは，構成定義に指定されたhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないか確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

(2)　復旧確認動作の流れ

復旧確認動作の流れを，障害後に接続先が復旧している場合と復旧していない場合とに分けて説明します。

(a)　障害後に接続先が復旧している場合

次の条件が定義された場合の復旧確認動作の流れを示します。

ネームサービスを使用したRPCで行う。

hostAが障害発生後に復旧している。

Connector .NET構成定義の<connection>要素のfailureCheckInterval属性で指定した時間が経過している。

コネクションA，B，Cの順番に実行する。

プロファイルID1：hostA，hostBの順に接続先を選択する。

プロファイルID2：hostB，hostAの順に接続先を選択する。

図1-37　復旧確認動作の流れ（障害後に接続先が復旧している場合）

コネクションAは，構成定義に指定されたhostA:10000に接続する前に，接続障害情報にhostA:10000が登録されていないかどうかを確認します。

接続障害情報にhostA:10000が登録されているが，接続障害情報の障害発生時刻から一定時間が経過しているため，接続を試みます。
接続に成功します。

接続障害情報からhostA:10000を削除します。

コネクションBは，構成定義に指定されたhostA:10000に接続する前に，接続障害情報にhostA:10000が登録されていないかどうかを確認します。

接続障害情報にhostA:10000が登録されていないため，接続を試みます。
接続に成功します。

コネクションCは，構成定義に指定されたhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないかどうかを確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

(b)　障害後に接続先が復旧していない場合

次の条件が定義された場合の復旧確認動作の流れを示します。

ネームサービスを使用したRPCで行う。

hostAが障害発生後に復旧していない。

Connector .NET構成定義の<connection>要素のfailureCheckInterval属性で指定した時間が経過している。

コネクションA，B，Cの順番に実行する。

プロファイルID1：hostA，hostBの順に接続先を選択する。

プロファイルID2：hostB，hostAの順に接続先を選択する。

図1-38　復旧確認動作の流れ（障害後に接続先が復旧していない場合）

コネクションAは，構成定義に指定されたhostA:10000に接続する前に，接続障害情報にhostA:10000が登録されていないかどうかを確認します。

接続障害情報にhostA:10000が登録されているが，接続障害情報の障害発生時刻から一定時間が経過しているため，接続を試みます。
hostA:10000は障害発生中のため，接続に失敗します。

接続障害情報の障害発生時刻を現在の時刻に更新します。

コネクションAは，次の接続先として設定されているhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないかどうかを確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

コネクションBは，構成定義に指定されたhostA:10000に接続する前に，接続障害情報にhostA:10000が登録されていないかどうかを確認します。
接続障害情報にhostA:10000が登録されているため，hostA:10000には接続しません。

コネクションBは，次の接続先として設定されているhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないかどうかを確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

コネクションCは，構成定義に指定されたhostB:10000に接続する前に，接続障害情報にhostB:10000が登録されていないかどうかを確認します。

接続障害情報にhostB:10000が登録されていないため，接続を試みます。
接続に成功します。

以降，hostA:10000の復旧が確認されるまで，Connector .NET構成定義の<connection>要素のfailureCheckInterval属性で指定した時間ごとに，コネクションAまたはコネクションBが1.～5.の動作をします。

1.8.4　接続障害軽減機能を使用する場合の注意事項

接続障害軽減機能を使用する場合の注意事項を次に示します。

接続障害軽減機能は接続先のTP1/Serverが複数存在する場合に有効です。接続先が一つの場合にこの機能を使用しても効果はありません。

ネームサービスを使用する場合，TP1/Serverの設定で必ずスケジュールサービスのポート番号を指定してください。ポート番号を指定しない場合，不要な障害情報が残り，メモリリソースを圧迫するおそれがあります。

復旧確認動作時に接続先が障害から復旧していない場合，接続を試みるコネクションには再度接続障害が発生します。また，再度接続障害が発生した時刻から復旧確認間隔の経過後に次の復旧確認動作が実行されます。

復旧確認動作を行わない場合，接続先を切り替えたコネクションを障害発生前の接続先へと戻すためには，アプリケーションを再起動する必要があります。

リモートAPI機能を使用したRPCの場合，常設コネクションの確立時（コネクションの生成時や問い合わせ間隔の経過によるrapサーバから常設コネクション解放後の再接続時など）にだけ，接続障害軽減機能が適用されます。常設コネクションの確立後，サーバ側で障害が発生した場合は，同じ接続先への常設コネクションを持つすべてのコネクションで，サービス要求時に通信障害が検知される場合があります。サーバ側の電源切断などサーバ側で障害が発生した場合，障害検知にはRPCの最大応答待ち時間（Client .NET構成定義の<rpc>要素のwatchTime属性で指定した値）が掛かります。

構成定義に指定されているすべての接続先が接続障害情報に登録されている場合，再度指定された接続先の順に接続を試みます。すべての接続先に対する接続に失敗した場合はエラーとなります。

Client .NET構成定義の<tp1Server>要素に同じ接続先を表すホスト名とIPアドレスを用いて複数定義している場合，それぞれ別の接続先として接続障害情報に登録されます。そのため，同じ接続先を表していても，それぞれの定義を使用したコネクションが一度ずつ接続障害を検知するまでは，接続障害情報として共有されません。

接続障害情報にはコネクションが接続障害を検知した時点で登録されます。そのため，一つのコネクションが接続障害を検知するまでの間にほかのコネクションが同じ接続先に対して接続を試みた場合，それぞれのコネクションで障害を検知するまでの時間が掛かります。

一時的な障害によって接続先が接続障害情報に登録されると，TP1/Serverが正常に稼働している場合でも接続先の切り替えが行われ，コネクションの接続先に偏りが発生します。この場合，Connector .NET構成定義の<connection>要素のfailureCheckInterval属性の値を小さくしたり，TP1/Serverのシステム共通定義などでipc_backlog_countの値を大きくしたりして，偏りの継続時間や発生頻度を軽減することができます。

接続障害情報に登録される情報の単位は，マシンやOpenTP1のノードではありません。ホスト名と，rapリスナー，ネームサーバ，およびスケジューラのプロセスごとに設定されたポート番号の組み合わせで管理されます。接続障害情報に登録される接続先を次の表に示します。

表1-15　接続障害情報に登録される接続先

接続先種別
接続障害情報に登録される接続先

登録数
ホスト名

rapリスナー
0～Client .NET構成定義の<tp1Server>要素の数。
Client .NET構成定義の<tp1Server>要素のhost属性に指定した文字列。

ネームサーバ
1～Client .NET構成定義の<tp1Server>要素の数。
ただし，Client .NET構成定義の<tp1Server>要素の数は，TP1/Serverごとに一つとなります。
Client .NET構成定義の<tp1Server>要素のhost属性に指定した文字列。

スケジューラ（スケジューラダイレクト機能を使用したRPC）
1～Client .NET構成定義の<tp1Server>要素の数。
マスタスケジューラ以外にマルチスケジューラのポートを指定できます。
Client .NET構成定義の<tp1Server>要素のhost属性に指定した文字列。

スケジューラ（ネームサービスを使用したRPC）※
1～ネームサーバへの問い合わせで得られた接続先となるスケジューラの数。
ネームサーバへの問い合わせで得られた接続先となるスケジューラの数は，TP1/Serverがマルチスケジューラ機能を使用しているか使用していないかで次のように異なります。

マルチスケジューラ機能を使用している場合

各TP1/Serverで，マスタスケジューラ一つに加えて，マルチスケジューラの数も含まれます。

マルチスケジューラ機能を使用していない場合

各TP1/Serverで，マスタスケジューラの一つだけになります。

ネームサーバから通知されたIPアドレス。

注※

スケジューラダイレクト機能を使用したRPCで，Client .NET構成定義の<tp1Server>要素のhost属性にIPアドレスを指定した場合だけ，同じ接続先として扱われます。

1.9　WCF連携機能

WCF連携機能を使用すると，Windows Communication Foundation（WCF）の統一化されたプログラミングモデルからOpenTP1にサービスを要求できます。このため，WCFを採用するシステムやWCFをサポートしたMicrosoftの製品からOpenTP1へのサービス要求が容易になります。

WCFとは，.NET Framework v3.0および.NET Framework v3.5でサポートされている，サービス指向のアプリケーション実行基盤です。WCFは.NET RemotingやXML Webサービスなどの通信方式を統一化したプログラミングモデルを提供しています。

＜この節の構成＞

1.9.1　WCF連携機能の機能概要

1.9.2　TP1IntegrationBindingのサービスコントラクトおよびプロキシクラス

1.9.3　WCF連携機能を使用したUAPの開発と実行

1.9.4　WCFクライアントアプリケーションのコーディング方法

1.9.5　接続先OepnTP1のサービスの位置情報の指定形式

1.9.6　サービス要求の最大応答待ち時間の設定方法

1.9.7　アプリケーション構成ファイルの設定方法

1.9.8　WCF連携機能のサンプルプログラムの使用方法

1.9.1　WCF連携機能の機能概要

WCFでは，クライアントとサービスとの間でどのように通信するかをBindingとしてアプリケーション構成ファイルに定義することで，クライアントとサービス間の通信方式を決定します。WCF連携機能では，OpenTP1にサービスを要求できるように，WCFのBindingとしてTP1IntegrationBindingを提供します。

BindingにTP1IntegrationBindingを設定することで，WCFクライアントからOpenTP1上のSPPおよびSPP.NETにサービスを要求できます。ただし，サービスを要求できるSPP.NETは，.NETインタフェース定義を使用していないSPP.NETだけです。

なお，WCF連携機能はWCFクライアントからOpenTP1にサービスを要求するための機能であり，WCFサービスの開発はできません。そのため，WCFを利用する際に必要なサービスコントラクトおよびそのプロキシクラスは，Connector .NETのTP1IntegrationBindingであらかじめ提供しています。

WCF連携機能の概要を次の図に示します。

図1-39　WCF連携機能の概要

＜この項の構成＞

(1)　前提条件

(2)　使用できるプログラム言語

(3)　WCF連携機能で使用できるConnector .NETの機能

(1)　前提条件

(a)　適用OS

WCF連携機能は，次に示すOSで使用できます。

Windows XP

Windows Server 2003

Windows Vista

Windows Server 2008

(b)　前提ソフトウェア

WCF連携機能を使用する場合，次に示すソフトウェアのどちらかが必要です。

.NET Framework v3.0

.NET Framework v3.5

(2)　使用できるプログラム言語

WCF連携機能を使用してUAPを開発する場合，次のプログラム言語が使用できます。

C#

Visual Basic

(3)　WCF連携機能で使用できるConnector .NETの機能

WCF連携機能を使用してサービスを要求する場合，Connector .NETの機能で使用できる機能と使用できない機能があります。

(a)　使用できるConnector .NETの機能

WCF連携機能を使用する場合，Connector .NETの機能はConnector .NET構成定義に定義することで使用できます。

WCF連携機能で使用できるConnector .NETの機能と構成定義での定義を次の表に示します。

表1-16　WCF連携機能で使用できるConnector .NETの機能と構成定義での定義

Connector .NETの機能
使用可否
構成定義での定義

リモートプロシジャコール（RPC）
○
<client>要素

トランザクション制御機能（ローカルトランザクション）
×
－

トランザクション制御機能（分散トランザクション）
○
<distributedTransaction>要素

TCP/IP通信機能
×
－

コネクションプーリング機能
○
<connection>要素

バッファプーリング機能
○

<buffer>要素

<largestBufferPool>要素

<bufferPool>要素

TSP自動生成機能
×
－

リソース監視機能
○

<perfCounter>要素

<buffer>要素のthreshold属性

<largestBufferPool>のthreshold属性

<bufferPool>要素のthreshold属性

接続障害軽減機能
○
<connection>要素のfailureInfoSharing属性およびfailureCheckInterval属性

（凡例）

○：使用できます。

×：使用できません。

－：該当しません。

(b)　サービスを要求できるサーバUAPの種類

WCF連携機能を使用してサービスを要求できるサーバUAPの種類を次の表に示します。

表1-17　サービスを要求できるサーバUAPの種類

サーバUAPの種類 | 使用可否
SPP | ○
SPP.NET（.NETインタフェース定義を使用した場合） | ×
SPP.NET（.NETインタフェース定義を使用しない場合） | ○
MHP | ×

（凡例）

○：使用できます。

×：使用できません。

(c)　サービスを要求する際のRPC形態と種類

WCF連携機能を使用してサービスを要求する際のRPCの形態と種類を次の表に示します。

表1-18　サービスを要求する際のRPCの形態と種類

分類 | RPCの形態と種類 | 使用可否
RPCの形態 | 同期応答型RPC | ○※1
非同期応答型RPC | ×
非応答型RPC | ×
連鎖RPC | ×
RPCの種類※2 | リモートAPI機能を使用したRPC | ○
ネームサービスを使用したRPC | ○
スケジューラダイレクト機能を使用したRPC | ○

（凡例）

○：使用できます。

×：使用できません。

注※1

プロキシクラスのメソッド（Call）を利用してサービスを要求します。

注※2

RPCの種類は，Client .NET構成定義に定義することで自由に選択できます。

1.9.2　TP1IntegrationBindingのサービスコントラクトおよびプロキシクラス

TP1IntegrationBindingで使用するサービスコントラクトおよびそのプロキシクラスは，アセンブリ（Hitachi.OpenTP1.ServiceModel.TP1Integration.dll）で提供します。そのため，サービスコントラクトをコーディングし，プロキシクラスを生成する必要はありません。

サービスコントラクトおよびそのプロキシクラスは次の名称で提供しています。

サービスコントラクト

Hitachi.OpenTP1.ServiceModel.TP1Integration.ITP1Rpc

プロキシクラス

Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1RpcClient

TP1IntegrationBindingで提供するサービスコントラクトの内容を次に示します。

＜この項の構成＞

(1)　サービスコントラクト（C#の場合）

(2)　サービスコントラクト（Visual Basicの場合）

(1)　サービスコントラクト（C#の場合）

using System.ServiceModel;

namespace Hitachi.OpenTP1.ServiceModel.TP1Integration
{
  [ServiceContract(
    CallbackContract=null,
    ConfigurationName=
       "Hitachi.OpenTP1.ServiceModel.TP1Integration.ITP1Rpc",
    Name="ITP1Rpc",
    ProtectionLevel=System.Net.Security.ProtectionLevel.None,
    SessionMode=SessionMode.NotAllowed)]
  public interface ITP1Rpc
  {

     [OperationContract(
       AsyncPattern=false,
       IsOneWay=false,
       Name="Call",
       ProtectionLevel=System.Net.Security.ProtectionLevel.None,
     [TransactionFlow(TransactionFlowOption.Allowed)]
     void Call(string serviceName, byte[] inData, int inLength,
               ref byte[] outData, ref int outLength);

  }
}

(2)　サービスコントラクト（Visual Basicの場合）

Imports System.ServiceModel

Namespace Hitachi.OpenTP1.ServiceModel.TP1Integration

   <ServiceContract( _
    CallbackContract:=Nothing, _
    ConfigurationName:= _
       "Hitachi.OpenTP1.ServiceModel.TP1Integration.ITP1Rpc", _
    Name:="ITP1Rpc", _
    ProtectionLevel:=Net.Security.ProtectionLevel.None, _
    SessionMode:=SessionMode.NotAllowed)> _
   Public Interface ITP1Rpc

       <OperationContract( _
        AsyncPattern:=False, _
        IsOneWay:=False, _
        Name:="Call", _
        ProtectionLevel:= _
           System.Net.Security.ProtectionLevel.None, _
       <TransactionFlow(TransactionFlowOption.Allowed)> _
       Sub [Call](ByVal service As String, _
           ByVal inData() As Byte, ByVal inLength As Integer, _
           ByRef outData() As Byte, ByRef outLength As Integer)
   End Interface

End Namespace

1.9.3　WCF連携機能を使用したUAPの開発と実行

WCF連携機能を使用したUAPの開発と実行には，Windows SDKを使用する方法とVisual Studioを使用する方法があります。

＜この項の構成＞

(1)　Windows SDKを使用する場合

(2)　Visual Studioを使用する場合

(1)　Windows SDKを使用する場合

Windows SDKを使用して，UAPを開発および実行する手順を次に示します。

TP1IntegrationBindingを使用したWCFのクライアントアプリケーションをコーディングします。
コーディング方法については，「1.9.4　WCFクライアントアプリケーションのコーディング方法」を参照してください。

アプリケーション構成ファイルを作成します。
WCF連携機能を使用する場合のアプリケーション構成ファイルの設定方法については，「1.9.7　アプリケーション構成ファイルの設定方法」を参照してください。

アプリケーションをビルドします。
WCF連携機能を使用するには，次のアセンブリの参照が必要です。

System.ServiceModel.dll

Hitachi.OpenTP1.ServiceModel.TP1Integration.dll

なお，Hitachi.OpenTP1.ServiceModel.TP1Integration.dllは，次のディレクトリに配置されています。
〈Connector .NETのインストールディレクトリ〉¥bin

アプリケーションを実行します。

(2)　Visual Studioを使用する場合

Visual Studioを使用して，UAPを開発および実行する手順を次に示します。

WCF連携機能を使用するプロジェクトを選択し，Visual Studioの［プロジェクト］メニューから［参照の追加］を選択します。

［参照の追加］ダイアログから，コンポーネント名「TP1/Connector for .NET Framework TP1IntegrationBinding」および「System.ServiceModel.dll」選択し，追加します。

TP1IntegrationBindingを使用したWCFのクライアントアプリケーションをコーディングします。
コーディング方法については，「1.9.4　WCFクライアントアプリケーションのコーディング方法」を参照してください。

アプリケーション構成ファイルを作成します。
WCF連携機能を使用する場合のアプリケーション構成ファイルの設定方法については，「1.9.7　アプリケーション構成ファイルの設定方法」を参照してください。

Visual Studioの［ビルド］メニューから，［ソリューションのビルド］を選択し，アプリケーションをビルドします。

Visual Studioの［デバッグ］メニューから，［デバッグ開始］を選択し，デバッグを実行します。

1.9.4　WCFクライアントアプリケーションのコーディング方法

WCFクライアントアプリケーションのコーディング方法には，アプリケーション構成ファイルにWCFを設定する方法と設定しない方法があります。

＜この項の構成＞

(1)　アプリケーション構成ファイルにWCFを設定する場合

(2)　アプリケーション構成ファイルにWCFを設定しない場合

(1)　アプリケーション構成ファイルにWCFを設定する場合

アプリケーション構成ファイルにWCFを設定すると，設定した内容がプロキシオブジェクトによって取得され，接続先のOpenTP1のサービスグループが決定します。

複数のサービスグループを呼び出す場合には，アプリケーション構成ファイルに接続先のOpenTP1の設定を複数定義する必要があります。また，プロキシオブジェクトも呼び出すサービスグループの数だけ必要です。

(a)　コーディング手順

アプリケーション構成ファイルにWCFを設定する場合のコーディング手順を次に示します。

プロキシクラス（Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1RpcClient）をインスタンス化します。
アプリケーション構成ファイルに定義した内容を取得するため，引数には<endpoint>要素のname属性の値を指定します。

入力パラメタにデータを設定します。
サービスの応答の領域には，C#の場合はnullを，Visual Basicの場合はNothingを設定します。

必要に応じて，サービスを要求してからサービスの応答が返るまでの最大応答待ち時間を設定します。
最大応答待ち時間については，「1.9.6　サービス要求の最大応答待ち時間の設定方法」を参照してください。

プロキシオブジェクトのCallメソッドを呼び出します。

サービスの応答を参照して，必要な処理をします。

(b)　コーディング例

アプリケーション構成ファイルに次のようにWCF連携機能が設定されている場合のコーディング例を示します。

アプリケーション構成ファイル

<system.serviceModel>
 <client>
   <endpoint
     name="Gyoumu1"
     address="opentp1.rpc://MyProfile1/Gyoumu1"
     binding="tp1IntegrationBinding"
     contract="Hitachi.OpenTP1.ServiceModel.
               TP1Integration.ITP1Rpc"
     behaviorConfiguration="TP1BehaviorConfig">
   </endpoint>
   <endpoint
     name="Gyoumu2"
     address="opentp1.rpc://MyProfile1/Gyoumu2"
     binding="tp1IntegrationBinding"
     contract="Hitachi.OpenTP1.ServiceModel.
               TP1Integration.ITP1Rpc"
     behaviorConfiguration="TP1BehaviorConfig">
   </endpoint>
 </client>
  …

コーディング例（C#の場合）

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using Hitachi.OpenTP1.ServiceModel.TP1Integration;

namespace CSSample
{
 class Program
 {
   static void Main(string[] args)
   {
     try
     {
      // (1) プロキシクラスのインスタンス化
      TP1RpcClient client = new TP1RpcClient("Gyoumu1");
      // (2) 入力パラメタにデータを設定
      int inLen = 24;
      int outLen = 32;
      byte[] inBuffer = new byte[inLen];
      byte[] outBuffer = null;
      // (3) サービス要求の最大応答待ち時間を設定
      client.Endpoint.Binding.SendTimeout = TimeSpan.MaxValue;
      // (4) プロキシオブジェクトのCallメソッドを呼び出す
      client.Call(
          "Service",
          inBuffer, inLen,
          ref outBuffer, ref outLen);
      // (5) サービスの応答を参照して必要な処理をする
     }
     catch (CommunicationException wcfExp)
     {
      // WCFに関連する例外
     }
     catch (Exception exp)
     {
      // その他の例外
     }
   }
 }
}

コーディング例（Visual Basicの場合）

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.ServiceModel
Imports Hitachi.OpenTP1.ServiceModel.TP1Integration

Module VBSample

 Sub Main()
   Try
     ' (1) プロキシクラスのインスタンス化
     Dim client As TP1RpcClient = New TP1RpcClient("Gyoumu1")
     ' (2) 入力パラメタにデータを設定
     Dim inLen As Integer = 24
     Dim outLen As Integer = 32
     Dim inBuffer() As Byte = New Byte(inLen) {}
     Dim outBuffer() As Byte = Nothing
     ' (3) サービス要求の最大応答待ち時間を設定
     client.Endpoint.Binding.SendTimeout = TimeSpan.MaxValue
     ' (4) プロキシオブジェクトのCallメソッドを呼び出す
     client.Call("Service", _
            inBuffer, inLen, _
            outBuffer, outLen)
     ' (5) サービスの応答を参照して必要な処理をする
   Catch wcfExp As CommunicationException
     ' WCFに関連する例外
   Catch exp As Exception
     ' その他の例外
   End Try
 End Sub
End Module

(2)　アプリケーション構成ファイルにWCFを設定しない場合

アプリケーション構成ファイルにWCFの設定をしない場合は，接続先のOepnTP1の位置情報をオブジェクト（System.ServiceModel.EndpointAddress）に設定することで，呼び出すOpenTP1のサービスグループを決定します。

複数のサービスグループを呼び出す場合には，位置情報を設定するオブジェクトが複数必要です。また，プロキシオブジェクトも呼び出すサービスグループの数だけ必要です。

なお，Systemで始まる名前空間に属するクラスの詳細については，.NET Frameworkのドキュメントを参照してください。

(a)　コーディング手順

アプリケーション構成ファイルにWCFを設定しない場合のコーディング手順を次に示します。

System.ServiceModel.EndpointAddressクラスをインスタンス化します。
コンストラクタの引数には，URIを指定します。URIの指定方法については，「1.9.5　接続先OepnTP1のサービスの位置情報の指定形式」を参照してください。

Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1IntegrationBindingクラスをインスタンス化します。

プロキシクラス（Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1RpcClientクラス）をインスタンス化します。
コンストラクタの引数には，1.でインスタンス化したEndpointAddressオブジェクト，および2.でインスタンス化したTP1IntegrationBindingオブジェクトを指定します。

Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1IntegrationBehaviorクラスをインスタンス化します。

プロキシオブジェクトのEndpoint.Behaviorsプロパティから得られるSystem.Collections.Generic.KeyedByTypeCollection<System.ServiceModel.Description.IEndpointBehavior>オブジェクトのAddメソッドで，4.でインスタンス化したTP1IntegrationBehaviorオブジェクトを追加します。

入力パラメタにデータを設定します。
サービスの応答の領域には，C#の場合はnullを，Visual Basicの場合はNothingを設定します。

必要に応じて，サービスを要求してからサービスの応答が返るまでの最大応答待ち時間を設定します。
最大応答待ち時間については，「1.9.6　サービス要求の最大応答待ち時間の設定方法」を参照してください。

プロキシオブジェクトのCallメソッドを呼び出します。

サービスの応答を参照して，必要な処理をします。

(b)　コーディング例

アプリケーション構成ファイルにWCFの設定をしない場合のコーディング例を示します。

コーディング例（C#の場合）

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using Hitachi.OpenTP1.ServiceModel.TP1Integration;

namespace ConsoleApplication1
{
 class Program
 {
   static void Main(string[] args)
   {
     try
     {
      // (1) EndpointAddressクラスのインスタンス化
      EndpointAddress address =
          new EndpointAddress(
              "opentp1.rpc://MyProfile1/Gyoumu1");
      // (2) TP1IntegrationBindingクラスのインスタンス化
      TP1IntegrationBinding binding =
          new TP1IntegrationBinding();
      // (3) プロキシクラスのインスタンス化
      TP1RpcClient client =
          new TP1RpcClient(binding, address);
      // (4) TP1IntegrationBehaviorクラスのインスタンス化
      TP1IntegrationBehavior behavior =
           new TP1IntegrationBehavior();
      // (5) KeyedByTypeCollectionオブジェクトの
      //     Addメソッドを呼び出す
      client.Endpoint.Behaviors.Add(behavior);
      // (6) 入力パラメタにデータを設定
      int inLen = 24;
      int outLen = 32;
      byte[] inBuffer = new byte[inLen];
      byte[] outBuffer = null;
      // (7) サービス要求の最大応答待ち時間を設定
      client.Endpoint.Binding.SendTimeout = TimeSpan.MaxValue;
      // (8) プロキシオブジェクトのCallメソッドを呼び出す
      client.Call(
          "Service",
          inBuffer, inLen,
          ref outBuffer, ref outLen);
      // (9) サービスの応答を参照して必要な処理をする
     }
     catch (CommunicationException wcfExp)
     {
       // WCFに関連する例外
     }
     catch (Exception exp)
     {
       // その他の例外
     }
   }
 }
}

コーディング例（Visual Basicの場合）

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.ServiceModel
Imports Hitachi.OpenTP1.ServiceModel.TP1Integration

Module VBSample

 Sub Main()
   Try
     ' (1) EndpointAddressクラスのインスタンス化
     Dim address As EndpointAddress = _
         New EndpointAddress( _
             "opentp1.rpc://MyProfile1/Gyoumu1")
     ' (2) TP1IntegrationBindingクラスのインスタンス化
     Dim binding As TP1IntegrationBinding = _
         New TP1IntegrationBinding()
     ' (3) プロキシクラスのインスタンス化
     Dim client As TP1RpcClient = _
         New TP1RpcClient(binding, address)
     ' (4) TP1IntegrationBehaviorクラスのインスタンス化
     Dim behavior As TP1IntegrationBehavior = _
         New TP1IntegrationBehavior()
     ' (5) KeyedByTypeCollectionオブジェクトの
     '     Addメソッドを呼び出す
     client.Endpoint.Behaviors.Add(behavior)
     ' (6) 入力パラメタにデータを設定
     Dim inLen As Integer = 24
     Dim outLen As Integer = 32
     Dim inBuffer() As Byte = New Byte(inLen) {}
     Dim outBuffer() As Byte = Nothing
     ' (7) サービス要求の最大応答待ち時間を設定
     client.Endpoint.Binding.SendTimeout = TimeSpan.MaxValue
     ' (8) プロキシオブジェクトのCallメソッドを呼び出す
     client.Call("Service", _
             inBuffer, inLen, _
             outBuffer, outLen)
     ' (9) サービスの応答を参照して必要な処理をする
   Catch wcfExp As CommunicationException
     ' WCFに関連する例外
   Catch exp As Exception
     ' その他の例外
   End Try
 End Sub
End Module

1.9.5　接続先OepnTP1のサービスの位置情報の指定形式

アプリケーション構成ファイルにWCFを設定しない場合は，WCFクライアントアプリケーションをコーディングするときに，接続先OepnTP1のサービスの位置情報を指定する必要があります。接続先OepnTP1のサービスの位置情報は，opentp1.rpc URIの形式で指定します。opentp1.rpc URIの形式を次に示します。

opentp1.rpc://プロファイルID※1/サービスグループ名※2/※3

注※1

WCF連携機能を使用する場合に適用するConnector .NET構成定義のプロファイルを文字列で指定します。

形式に指定するプロファイルIDは省略できます。省略した場合，デフォルトプロファイルの情報（<common>要素）が有効になります。

注※2

接続先のOpenTP1のサービスグループ名を1～31文字の識別子（先頭がアルファベット（A～Z，a～z）で始まる英数字列）で指定します。

形式に指定するサービスグループ名は省略できません。

注※3

形式の最後に指定する「/」は省略できます。

指定例を次に示します。

【指定例1】

条件

プロファイルID：GyoumuProfile1

サービスグループ名：Gyoumu1

指定例

opentp1.rpc URI : opentp1.rpc://GyoumuProfile1/Gyoumu1

【指定例2】

条件

プロファイルID：省略（<common>要素を使用する場合）

サービスグループ名：Gyoumu2

指定例

opentp1.rpc URI : opentp1.rpc:///Gyoumu2

1.9.6　サービス要求の最大応答待ち時間の設定方法

WCF連携機能では，サービスを要求してからサービスの応答が返るまでの最大応答待ち時間を設定できます。Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1RpcClientクラスの次のどちらかのプロパティに，最大応答待ち時間を設定したSystem.TimeSpanオブジェクトを設定します。

Endpoint.Binding.SendTimeoutプロパティ

InnerChannel.OperationTimeoutプロパティ

上記のプロパティに最大応答待ち時間を設定しなかった場合，最大応答待ち時間はWCFのデフォルト値となります。プロパティの詳細については，.NET Frameworkのドキュメントを参照してください。

最大応答待ち時間として設定できる値を次の表に示します。

表1-19　最大応答待ち時間として設定できる値

設定できる値 | 説明
TimeSpan.MaxValue | サービスの応答を受信するまで無限に待ちます。
TimeSpan(0,0,0) | Client.NET構成定義の<rpc>要素のwatchTime属性で指定した値に従います。Client.NET構成定義については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。
TimeSpan(0,0,1)からTimeSpan(0,0,65535)※ | 設定した時間（秒）までサービスの応答を待ちます。1～65535（秒）まで指定できます。

注※

System.TimeSpanに設定できる時間は，秒だけでなく，日，時間，分，ミリ秒単位でも設定できますが，この値は秒単位で1から65535の範囲内になるように設定してください。

1.9.7　アプリケーション構成ファイルの設定方法

WCF連携機能でTP1IntegrationBindingを使用する場合のWCFの設定方法について説明します。なお，WCFの設定方法の詳細については，.NET Frameworkのドキュメントを参照してください。また，Connector .NET構成定義の詳細については，「2.　構成定義」を参照してください。

WCF連携機能を使用する場合，呼び出すサービスおよびクライアントの設定を，アプリケーション構成ファイルの<system.serviceModel>要素に記述します。

形式

形式の(1)～(4)は，次に説明する番号に対応しています。

＜この項の構成＞

(1)　<client>要素に定義する内容

(2)　<bindings>要素に定義する内容

(3)　<behaviors>要素に定義する内容

(4)　<extensions>要素に定義する内容

(5)　アプリケーション構成ファイルの設定例

(1)　<client>要素に定義する内容

(a)　形式

<client>
 <endpoint name="<endpoint>要素の名称"
           address="呼び出したいOpenTP1のサービスの位置情報"
           binding="tp1IntegrationBinding"
           contract="WCF連携機能で使用するサービスコントラクト"
           behaviorConfiguration="<behavior>要素のname属性の値"
           bindingConfiguration="">
 </endpoint>
</client>

(b)　要素

●endpoint

WCFのクライアント側のendpointを設定する要素です。

この要素は省略できません。

(c)　属性

●name

<endpoint>要素の名称を指定します。

●address

呼び出したいOpenTP1のサービスの位置情報をopentp1.rpc URIの形式で指定します。

opentp1.rcp URIの形式および指定例については，「1.9.5　接続先OepnTP1のサービスの位置情報の指定形式」を参照してください。

この属性は省略できません。

●binding

「tp1IntegrationBinding」を指定します。

この属性は省略できません。また，大文字と小文字が区別されるため注意してください。

●contract

WCF連携機能で使用するサービスコントラクトを完全限定名で指定します。

この属性は省略できません。

●behaviorConfiguration

<tp1Behavior>要素を含む<behavior>要素を指定します。この属性は，<behavior>要素のname属性と同じ値を指定してください。

この属性は省略できません。

●bindingConfiguration

WCF連携機能では使用しません。この属性は省略するか，または空文字を指定してください。

(2)　<bindings>要素に定義する内容

(a)　形式

<bindings>
 <tp1IntegrationBinding />
</bindings>

(b)　要素

●tp1IntegrationBinding

tp1IntegrationBindingのBindingについて設定する要素です。tp1IntegrationBindingを設定する場合，「<tp1IntegrationBinding />」と記述します。

この要素は省略できません。

この要素は，属性および子要素を持ちません。

(3)　<behaviors>要素に定義する内容

(a)　形式

<behaviors>
 <endpointBehaviors>
   <behavior name="<behavior>要素を一意に識別するための名称">
     <tp1Behavior />
   </behavior>
 </endpointBehaviors>
</behaviors>

(b)　要素

●endpointBehaviors

子要素として，<behavior>要素を定義します。

この要素は省略できません。

●behavior

Bindingの検証を設定する要素です。

この要素は省略できません。

子要素として，<tp1Behavior>要素を定義します。

●tp1Behavior

tp1IntegrationBehaviorについて設定する要素です。tp1Behaviorを設定する場合，「<tp1Behavior />」と記述します。

この要素は省略できません。

この要素は，属性および子要素を持ちません。

(c)　属性

●name

<behavior>要素を一意に識別するための名称を指定します。この属性は，<endpoint>要素のbehaviorConfiguration属性と同じ値を指定してください。

この属性は省略できません。

(4)　<extensions>要素に定義する内容

(a)　形式

<extensions>
 <behaviorExtensions>
   <add name="tp1Behavior"
        type="Hitachi.OpenTP1.ServiceModel.TP1Integration.
              TP1IntegrationBehaviorElement,
              Hitachi.OpenTP1.ServiceModel.TP1Integration,
              Version=7.0.0.0, Culture=neutral,
              PublicKeyToken=2440cf5f0d80c91c" />
 </behaviorExtensions>
 <bindingExtensions>
   <add name="tp1IntegrationBinding"
        type="Hitachi.OpenTP1.ServiceModel.TP1Integration.
              TP1IntegrationBindingCollectionElement,
              Hitachi.OpenTP1.ServiceModel.TP1Integration,
              Version=7.0.0.0, Culture=neutral,
              PublicKeyToken=2440cf5f0d80c91c"/>
 </bindingExtensions>
</extensions>

(b)　要素

●extensions

bindingやbehaviorを拡張するための設定をする要素です。

この要素は省略できません。

子要素として，<behaviorExtensions>要素および<bindingExtensions>要素を定義します。

●behaviorExtensions

<tp1Behavior>要素をアプリケーション構成ファイルに定義できるように機能を拡張するための要素です。

この要素は省略できません。

子要素として，<add>要素を次のように定義します。

<behaviorExtensions>
 <add name="tp1Behavior"
      type="Hitachi.OpenTP1.ServiceModel.TP1Integration.
            TP1IntegrationBehaviorElement,
            Hitachi.OpenTP1.ServiceModel.TP1Integration,
            Version=7.0.0.0, Culture=neutral,
            PublicKeyToken=2440cf5f0d80c91c" />
</behaviorExtensions>

●bindingExtensions

<tp1IntegrationBinding>要素をアプリケーション構成ファイルに定義できるように機能を拡張するための要素です。

この要素は省略できません。

子要素として，<add>要素を次のように定義します。

<bindingExtensions>
 <add name="tp1IntegrationBinding"
      type="Hitachi.OpenTP1.ServiceModel.TP1Integration.
            TP1IntegrationBindingCollectionElement,
            Hitachi.OpenTP1.ServiceModel.TP1Integration,
            Version=7.0.0.0, Culture=neutral,
            PublicKeyToken=2440cf5f0d80c91c"/>
</bindingExtensions>

(5)　アプリケーション構成ファイルの設定例

WCF連携機能でTP1IntegrationBindingを使用する場合のアプリケーション構成ファイルの設定例を次に示します。WCFの設定以外の記述は，Connector .NET構成定義です。Connector .NET構成定義については，「2.　構成定義」を参照してください。

<configuration>
 <configSections>
   <section
     name="hitachi.opentp1.connector"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"   />
   <section
     name="hitachi.opentp1.client"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"   />
 </configSections>

 <!-- WCFの設定 -->

 <system.serviceModel>
   <client>
     <endpoint
       name="Gyoumu1"
       address="opentp1.rpc://MyProfile1/Gyoumu1"
       binding="tp1IntegrationBinding"
       contract="Hitachi.OpenTP1.ServiceModel
                 .TP1Integration.ITP1Rpc"
       behaviorConfiguration="TP1BehaviorConfig">
     </endpoint>
     <endpoint
       name="Gyoumu2"
       address="opentp1.rpc:///Gyoumu2"
       binding="tp1IntegrationBinding"
       contract="Hitachi.OpenTP1.ServiceModel
                 .TP1Integration.ITP1Rpc"
       behaviorConfiguration="TP1BehaviorConfig">
     </endpoint>
   </client>

   <bindings>
     <tp1IntegrationBinding />
   </bindings>

   <behaviors>
     <endpointBehaviors>
       <behavior name="TP1BehaviorConfig">
         <tp1Behavior />
       </behavior>
     </endpointBehaviors>
   </behaviors>

   <extensions>
     <behaviorExtensions>
       <add
         name="tp1Behavior"
         type="Hitachi.OpenTP1.ServiceModel.TP1Integration
               .TP1IntegrationBehaviorElement,
               Hitachi.OpenTP1.ServiceModel.TP1Integration,
               Version=7.0.0.0, Culture=neutral,
               PublicKeyToken=2440cf5f0d80c91c" />
     </behaviorExtensions>
     <bindingExtensions>
       <add
         name="tp1IntegrationBinding"
         type="Hitachi.OpenTP1.ServiceModel.TP1Integration
               .TP1IntegrationBindingCollectionElement,
               Hitachi.OpenTP1.ServiceModel.TP1Integration,
               Version=7.0.0.0, Culture=neutral,
               PublicKeyToken=2440cf5f0d80c91c"/>
     </bindingExtensions>
   </extensions>
 </system.serviceModel>

 <!-- Connector .NETの構成定義-->

 <hitachi.opentp1.connector>
   <common>
   <client conf=""/>
     <connection pooled="20" active="100"
                 threshold="80" watchtime="120"
                 failureInfoSharing="true"
                 failureCheckInterval="300">
       <occupation pooled="10"/>
     </connection>
     <log destination="c:¥temp¥connectorn"
          fileSize="1048576" level="1"/>
     <buffer pooling="true" create="false">
       <largestBufferPool maxCount="5" threshold="100" />
       <bufferPool size="102400" maxCount="50"
                   threshold="120" />
       <bufferPool size="10240" maxCount="50"
                   threshold="150" />
     </buffer>
     <perfCounter use="true" />
     <option maxMessageSize="8" />
   </common>
   <profile id="MyProfile1">
     <client conf="clinetProfile1"/>
     <connection>
       <occupation pooled="2"/>
     </connection>
   </profile>
 </hitachi.opentp1.connector>

 <hitachi.opentp1.client>
   <common>
     <tp1Server host="hostA" />
     <rpc use="nam" watchTime="0" />
     <nameService port="10000" />
   </common>
   <profile id="traceMode">
     <errTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000" />
     <methodTrace use="true" path="c:¥temp¥clientn"
                  fileSize="100000" />
     <uapTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000" />
     <dataTrace use="true" path="c:¥temp¥clientn"
                fileSize="100000" />
   <profile id="clinetProfile1">
     <tp1Server host="hostA" />
     <rpc use="nam" watchTime="0" />
     <nameService port="10000" />
   </profile>
 </hitachi.opentp1.client>

</configuration>

1.9.8　WCF連携機能のサンプルプログラムの使用方法

Connector .NETでは，WCF連携機能を使用するためのサンプルプログラムを提供しています。WCF連携機能のサンプルプログラムについては，「3.8　サンプルプログラムの使用方法」を参照してください。

1.10　環境設定

Connector .NETのインストール後に必要な，環境設定やセキュリティポリシーの設定などについて説明します。

＜この節の構成＞

1.10.1　インストール後の環境設定

1.10.2　セキュリティポリシーの設定

1.10.3　メッセージの出力先

1.10.1　インストール後の環境設定

運用コマンドを使用する場合は，環境変数PATHに〈インストールディレクトリ〉¥binを追加してください。

Visual StudioでUAPを開発する場合は，必要に応じて次に示すアセンブリをUAPのプロジェクトの参照設定に追加してください。

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.Connector.dll

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.Client.dll

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.ServiceModel.TP1Integration.dll

なお，次のアセンブリはインストール時にグローバルアセンブリキャッシュ（GAC）に登録されます。

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.Connector.dll

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.ServiceModel.TP1Integration.dll

1.10.2　セキュリティポリシーの設定

Connector .NETをインストールおよび実行することで，インストールおよび実行したOS上の.NET Frameworkのコードアクセスセキュリティポリシーを変更してしまうことはありません。

Connector .NETの機能を利用するためには，次に示すファイルに必要なアクセス許可が与えられていなければなりません。必要なアクセス許可が与えられていない場合は，コマンドやアプリケーションが実行できません。

＜この項の構成＞

(1)　.NET Frameworkのコードアクセスセキュリティポリシーの影響を受けるファイル（アセンブリ）

(2)　必要なアクセス許可

(1)　.NET Frameworkのコードアクセスセキュリティポリシーの影響を受けるファイル（アセンブリ）

〈インストールディレクトリ〉¥bin¥if2cstub.exe

〈インストールディレクトリ〉¥bin¥spp2cstub.exe

〈インストールディレクトリ〉¥bin¥if2tsp.exe

〈インストールディレクトリ〉¥bin¥spp2tsp.exe

〈インストールディレクトリ〉¥bin¥cnnsetpf.exe

〈インストールディレクトリ〉¥bin¥cnnnidgen.exe

〈インストールディレクトリ〉¥bin¥cnntrsls.exe

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.Connector.dll

〈インストールディレクトリ〉¥bin¥Hitachi.OpenTP1.ServiceModel.TP1Integration.dll

〈インストールディレクトリ〉¥trs¥cnntrs.exe

Connector .NETのアプリケーションのアセンブリ，およびConnector .NETのアセンブリを参照するすべてのアセンブリ

(2)　必要なアクセス許可

「(1)　.NET Frameworkのコードアクセスセキュリティポリシーの影響を受けるファイル（アセンブリ）」で示したすべてのファイル（アセンブリ）には，完全信頼を指定する必要があります。

1.10.3　メッセージの出力先

Connector .NETが提供する運用コマンドが出力するメッセージは，標準出力または標準エラー出力に出力されます。クラスライブラリが出力するメッセージは，Connector .NETログファイルに出力されます。

Connector .NETログファイルの出力先は，構成ファイルのプロパティで指定できます。また，TP1ConnectionManagerクラスのLogWriterプロパティに独自のTextWriterを設定することによって，Connector .NETログファイル以外に独自に出力先を設定できます。

この場合の出力形式はログファイルと同じになります。

2.　構成定義

この章では，Connector .NETで使用する構成定義について説明します。

＜この章の構成＞

構成ファイルの形式

hitachi.opentp1.connector

common

profile

client

connection

occupation

tcpip

log

buffer

largestBufferPool

bufferPool

option

perfCounter

distributedTransaction

recoveryService

定義例

構成ファイルの形式

Connector .NET構成定義は，アプリケーション構成ファイル，またはマシン構成ファイルにカスタム構成セクションとして記述します。

カスタム構成セクションの宣言

形式

<configSections>
 <section
   name="hitachi.opentp1.connector"
   type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
         Hitachi.OpenTP1.Client,Version=7.0.0.0,Culture=neutral,
         PublicKeyToken=2440cf5f0d80c91c,Custom=null"/>
 <section
   name="hitachi.opentp1.client"
   type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
         Hitachi.OpenTP1.Client,Version=7.0.0.0,Culture=neutral,
         PublicKeyToken=2440cf5f0d80c91c,Custom=null"/>
</configSections>

説明

カスタム構成セクション宣言の<section>要素は，<configSections>要素の子要素として，各アプリケーション構成ファイルに記述するか，マシン構成ファイルに記述します。マシン構成ファイルに記述した場合，各アプリケーション構成ファイルに記述する必要はありません。

カスタム構成セクション宣言は，必ず<hitachi.opentp1.connector>要素よりも前に記述してください。

構成定義の記述

形式

<hitachi.opentp1.connector>
 <common>
   〔〔<構成定義要素名〔〔属性名="属性値"〕…〕/>〕…〕
 </common>
 〔〔<profile id="プロファイルID">
   〔〔<構成定義要素名〔〔属性名="属性値"…〕…〕/>〕…〕
     </profile>〕…〕
</hitachi.opentp1.connector>

説明

<hitachi.opentp1.connector>要素の子要素として，<common>要素と<profile>要素が記述できます。<profile>要素は複数記述できます。<common>要素または<profile>要素の子要素として，各構成定義要素が記述できます。

<profile>要素が指定されていない，または指定された<profile>要素内に該当する構成定義要素が記述されていない場合は，<common>要素内に記述された構成定義要素が有効になります。この構成定義要素をデフォルトプロファイルと呼びます。

<common>要素内および<profile>要素内に，同じ構成定義要素が記述されている場合は，<profile>要素内の構成定義要素が有効になります。

<common>要素内または一つの<profile>要素内に，複数定義できない構成定義要素が複数定義されている場合は，最後に記述した構成定義要素が有効になります。

なお，必ず記述しなくてはならない構成定義要素が<common>要素内および<profile>要素内に記述されていない場合は，実行時にエラーが発生します。

TP1ConnectionManagerクラスのコンストラクタで，引数にプロファイルIDを指定していない，または空文字列（""）を指定した場合は，<common>要素内に記述された構成定義要素が有効になります。TP1ConnectionManagerクラスのコンストラクタで引数にプロファイルIDを指定した場合は，該当する<profile>要素内の構成定義要素が有効になります。

相手先のサーバ別，およびリソース制限別に<profile>要素を記述しておくと便利です。

外部ファイルでの構成定義の記述

形式

<hitachi.opentp1.connector import="絶対パスの外部XMLファイル名">
</hitachi.opentp1.connector>

外部ファイルの形式

<hitachi.opentp1.connector>
 <common>
   〔〔<構成定義要素名 〔〔属性名="属性値"〕…〕/>〕…〕
 </common>
 〔〔<profile id="プロファイルID">
   〔〔<構成定義要素名 〔〔属性名="属性値"…〕…〕/>〕…〕
     </profile>〕…〕
</hitachi.opentp1.connector>

説明

<hitachi.opentp1.connector>要素のimport属性を指定すると，外部ファイルで定義した構成定義を読み込ませることができます。複数のアプリケーションで同じ構成定義を使用したい場合に指定します。

外部ファイルは，カスタム構成セクションの<hitachi.opentp1.connector>要素をルート要素とするXMLファイルで指定します。また，import属性には外部ファイルのパスを絶対パスで指定してください。

【外部ファイルの指定例】

c:¥MyApp¥tp1config.xml

注意事項

構成定義要素の属性値として指定するtrueおよびfalseには，大文字と小文字の区別はありません。

構成定義要素の属性に不正な値を指定した場合，デフォルト値が存在するものはデフォルト値が適用されます。

hitachi.opentp1.connector

形式

<hitachi.opentp1.connector>
 <common>
   <構成定義要素名 属性名="属性値"/>
 </common>
 <profile id="プロファイルID">
   <構成定義要素名 属性名="属性値"/>
 </profile>
</hitachi.opentp1.connector>

説明

Connector .NET構成ファイルの構成セクション名です。

<hitachi.opentp1.connector>要素の子要素として，<common>要素と<profile>要素が指定できます。

<common>要素は省略できません。必ず<hitachi.opentp1.connector>要素内に<common>要素を一つだけ指定してください。

<profile>要素は省略できます。

common

形式

<common>
 <構成定義要素名 属性名="属性値"/>
</common>

説明

構成定義要素を指定します。

この要素内では構成定義要素の指定を省略できます。

また，この要素内にだけ指定できる構成定義要素，属性名，および属性値もあります。

この要素は省略できません。

profile

形式

<profile id="プロファイルID">
 <構成定義要素名 属性名="属性値"/>
</profile>

説明

構成定義要素を指定します。

この要素内では構成定義要素の指定を省略できます。

この要素内で指定していない構成定義要素，属性名，および属性値については，<common>要素内で指定した構成定義要素，属性名，および属性値が有効になります。

この要素は省略できます。

属性

●id="プロファイルID"　　～〈文字列〉

プロファイルを一意に識別するためのIDを指定します。

<profile>要素を指定した場合，この属性は省略できません。

トランザクションリカバリサービスの構成定義ではこの属性の値にコンマ（,）を使用しないでください。

client

形式

<client conf="Client .NET構成定義のプロファイルID"/>

説明

Client .NET構成定義のプロファイルを指定します。

この要素は省略できます。省略した場合，Client .NET構成定義の<common>要素内に記述された構成定義要素が有効になります。Client .NET構成定義については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

属性

●conf="Client .NET構成定義のプロファイルID"　　～〈文字列〉

Client .NET構成定義のプロファイルIDを指定します。

この属性で指定するClient .NET構成定義の<profile>要素内に，<tp1Server>要素が記述されていなければなりません。

また，リモートAPI機能を使用したRPCを行う場合は，<rapService>要素のautoConnect属性にtrueを指定してください。

この属性は省略できます。省略した場合，Client .NET構成定義の<common>要素内に記述された構成定義要素が有効になります。

Client .NET構成定義については，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

記述例

<client conf="server2"/>

connection

形式

<connection pooled="Connector .NETが管理する
                   コネクションプールの最大数"
           active="最大同時使用コネクション数"
           threshold="コネクション数監視時のしきい値"
           watchtime="コネクション取得要求最大応答待ち時間"
           failureInfoSharing="true|false"
           failureCheckInterval="復旧確認動作間隔"/>

説明

コネクションに関する指定をします。

この要素は省略できます。

属性

●pooled="Connector .NETが管理するコネクションプールの最大数"　　～〈符号なし整数〉((0～4096))《64》

Connector .NETが管理するコネクションプールの最大数を指定します。

この属性は省略できます。

また，<profile>要素内にこの属性を指定する場合，値は指定できません。

●active="最大同時使用コネクション数"　　～〈符号なし整数〉((1～4096))《64》

Connector .NET使用時の最大同時使用コネクション数を指定します。コネクションプールの最大数より大きな値を指定できます。コネクションプールの最大数を超えた分のコネクションはプールされません。

この属性は省略できます。

また，<profile>要素内にこの属性を指定する場合，値は指定できません。

●threshold="コネクション数監視時のしきい値"　　～〈符号なし整数〉((0～100))《0》（単位：％）

最大同時使用コネクション数に対する，使用中コネクション数の比率のしきい値を指定します。指定した値を超えた場合は，Connector .NETのログファイルに警告メッセージが出力されます。

この属性は省略できます。

また，0を指定した場合は警告メッセージは出力されません。

●watchtime="コネクション取得要求最大応答待ち時間"　　～〈符号なし整数〉((0～65535))《180》（単位：秒）

コネクション取得要求を行ってから実際にコネクションを取得するまでの最大待ち時間を指定します。指定時間を過ぎてもコネクションを取得ができない場合は，エラーが発生します。

この属性は省略できます。

0を指定した場合は，コネクションを取得するまで待ち続けます。

●failureInfoSharing="true|false"　　～《false》

接続障害軽減機能の使用するかどうかを指定します。

この属性は省略できます。

true：接続障害軽減機能を使用します。

false：接続障害軽減機能を使用しません。

●failureCheckInterval="復旧確認動作間隔"　　～〈符号なし整数〉((0～2147483647))《300》（単位：秒）

接続障害が発生した接続先に対して，復旧確認動作を行う間隔を指定します。

この属性は省略できます。

0を指定した場合，復旧確認動作は行いません。

記述例

<connection pooled="20"
           active="100"
           threshold="80"
           watchtime="120"
           failureInfoSharing="true"
           failureCheckInterval="300"/>

occupation

形式

<occupation pooled="プロファイルが占有できる
                   コネクションプールの最大数"/>

説明

コネクションの占有に関する指定をします。

この要素は省略できます。

属性

●pooled="プロファイルが占有できるコネクションプールの最大数"　　～〈符号なし整数〉((0～4096))

Connector .NETが管理するコネクションプールのうち，このプロファイルで占有できるコネクションプールの最大数を指定します。コネクションプールの最大数より大きな値は指定できません。

この属性は省略できます。省略した場合，この属性の値はコネクションプールの最大数と同じ値になります。

なお，この属性は<connection>要素を指定した場合にだけ有効です。その場合，<connection>要素内に指定してください。

記述例

<occupation pooled="10"/>

tcpip

形式

<tcpip keepAlive="true|false"/>

説明

コネクションに関する指定をします。

この要素は省略できます。

属性

●keepAlive="true｜false"　　～《true》

TCP/IP通信機能を利用する場合に，TcpipConnectionクラスのDisposeメソッドによってコネクションをコネクションプールに戻す際に，物理コネクションを解放するかどうかを指定します。

この属性は省略できます。

true：物理コネクションを解放しないで，そのままコネクションプールに戻します。

false：物理コネクションを解放してから，コネクションプールに戻します。

コネクションプールに戻されないで破棄される場合は，この指定に関係なく物理コネクションは解放されます。

記述例

<tcpip keepAlive="true"/>

log

形式

<log destination="Connector .NETログファイル作成ディレクトリ"
    fileSize="Connector .NETログファイルサイズ"
    level="0|1|2|3"/>

説明

Connector .NETが用意しているログ出力機能に関する指定をします。

TP1ConnectionManagerメソッドのLogWriterプロパティを設定した場合，この要素は無視されます。

この要素は省略できます。

また，この要素は<common>要素内でだけ有効です。

属性

●destination="Connector .NETログファイル作成ディレクトリ"　　～〈文字列〉

Connector .NETログファイルを作成するディレクトリを絶対パス名で指定します。

指定したディレクトリに，ファイル名がtp1connector1.logおよびtp1connector2.logのファイルを作成し，ラウンドロビン方式で記録します。

指定するディレクトリは事前に作成し，アプリケーションごとに異なるディレクトリを指定してください。指定したディレクトリが存在しない，または書き込みができない場合，Connector .NETログファイルは作成されません。

また，ASP.NETから利用している場合は，書き込み権限のあるディレクトリが限られていますので注意が必要です。

この属性は省略できます。この属性を省略した場合，Connector .NETログファイルは作成されません。

●fileSize="Connector .NETログファイルサイズ"　　～〈符号なし整数〉((1048576～2147483637))《1048576》（単位：バイト）

取得する一つのConnector .NETログファイルのサイズを指定します。

この属性は省略できます。

●level="0｜1｜2｜3"　　～《1》

ログレベルを指定します。

ログレベルにはError，Warning，Information，Detailの四つがあります。取得するログレベルを指定すると，指定したレベルに対応するメッセージインジケータのログだけを取得できます。

この属性は省略できます。

指定する数字によって，次のログレベルのメッセージが出力されます。

0：Error

1：Error，およびWarning

2：Error，Warning，およびInformation

3：Error，Warning，Information，およびDetail

ログレベルに3を指定した場合，ログレベル2の情報に加えて，リソース（コネクションおよびバッファ）の使用状況に関する情報が出力されます。ログレベル2およびログレベル3を指定した場合に出力されるメッセージを次に示します。メッセージの詳細については，マニュアル「OpenTP1 メッセージ」を参照してください。

ログレベル2

KFCA32400-I

KFCA32401-I

KFCA32409-I

KFCA32410-I

KFCA32412-I

KFCA32413-I

KFCA32414-I

KFCA32415-I

KFCA32471-I

KFCA32472-I

KFCA32473-I

KFCA32474-I

KFCA32475-I

KFCA32476-I

KFCA32480-I

KFCA32495-I

ログレベル3

KFCA32402-I

KFCA32403-I

KFCA32404-I

KFCA32405-I

KFCA32406-I

KFCA32407-I

KFCA32477-I

KFCA32478-I

記述例

<log destination=
      "C:¥Documents and Settings¥COMPUTERNAME¥ASPNET¥Log¥App1"
    fileSize="1048576"
    level="0"/>

buffer

形式

<buffer pooling="true|false"/>

説明

バッファに関する指定をします。

この要素は省略できます。

属性

●pooling="true｜false"　　～《false》

バッファプーリング機能を使用する場合に指定します。

この属性は省略できます。

true：バッファプーリング機能を使用します。

false：バッファプーリング機能を使用しません。

記述例

<buffer pooling="true"/>

largestBufferPool

形式

<largestBufferPool maxCount="最大バッファプール内のバッファ数"
                  threshold="バッファ数監視時のしきい値"/>

説明

最大バッファプールに関する指定をします。

バッファサイズの最大値は1メガバイトです。ただし，RPC送受信メッセージの最大長拡張機能を使用する場合，<option>要素のmaxMessageSize属性で指定した値（×1048576バイト）になります。

この要素は省略できます。

属性

●maxCount="最大バッファプール内のバッファ数"　　～〈符号なし整数〉((2～1024))《2》

最大バッファプール内のバッファ数を指定します。

この属性は省略できます。

なお，この属性は<buffer>要素のpooling属性にtrueを指定した場合にだけ有効です。その場合，<buffer>要素内に指定してください。

●threshold="バッファ数監視時のしきい値"　　～〈符号なし整数〉((0～10000))《0》（単位：％）

maxCount属性で指定したバッファ数に対する，使用中バッファ数の比率のしきい値を指定します。指定した値を超えた場合は，Connector .NETのログファイルに警告メッセージが出力されます。

この属性は省略できます。

100以上を指定した場合は，maxCount属性で設定した数を超えてバッファが生成されたことを意味します。0を指定した場合は，Connector .NETのログファイルに警告メッセージは出力されません。

記述例

<largestBufferPool maxCount="5"
                  threshold="100"/>

bufferPool

形式

<bufferPool size="バッファサイズ"
           maxCount="バッファプール内のバッファ数"
           threshold="バッファ数監視時のしきい値"/>

説明

バッファプールに関する指定をします。

この要素は省略できます。

属性

●size="バッファサイズ"　　～〈符号なし整数〉((1～1048575))《4096》（単位：バイト）

バッファプール内に作られるバッファのサイズを指定します。

同じバッファサイズを複数の<bufferPool>要素で指定した場合は，二つ目以降の要素の指定は無視されます。

この属性は省略できます。

また，この属性は<buffer>要素のpooling属性にtrueを指定した場合にだけ有効です。その場合，<buffer>要素内に指定してください。

なお，指定できるバッファサイズの最大は1048575バイトですが，RPC送受信メッセージの最大長拡張機能を使用する場合，指定した値から1を引いた値までバッファサイズ（最大で8388607バイト）を指定できます。

●maxCount="バッファプール内のバッファ数"　　～〈符号なし整数〉((2～1024))《64》

バッファプール内のバッファ数を指定します。

この属性は省略できます。

なお，この属性は<buffer>要素のpooling属性にtrueを指定した場合にだけ有効です。その場合，<buffer>要素内に指定してください。

●threshold="バッファ数監視時のしきい値"　　～〈符号なし整数〉((0～10000))《0》（単位：％）

maxCount属性で指定したバッファ数に対する，使用中バッファ数の比率のしきい値を指定します。指定した値を超えた場合は，Connector .NETのログファイルに警告メッセージが出力されます。

この属性は省略できます。

100以上を指定した場合は，maxCount属性で設定した数を超えてバッファが生成されたことを意味します。0を指定した場合は，Connector .NETのログファイルに警告メッセージは出力されません。

記述例

<bufferPool size="102400"
           maxCount="50"
           threshold="120"/>

option

形式

<option maxMessageSize="RPCメッセージの最大長"/>

説明

RPC送受信メッセージの最大長拡張機能に関する指定をします。

この要素は省略できます。

属性

●maxMessageSize="RPCメッセージの最大長"　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

TP1ConnectionクラスのExecuteメソッドで送受信できるユーザメッセージの最大長を指定します。

この属性は省略できます。

この属性を指定する場合は，Client .NET構成定義の<rpc>要素のmaxMessageSize属性もあわせて指定してください。なお，Connector .NETのmaxMessageSize属性で指定する値は，Client .NETのmaxMessageSize属性で指定する値以下にしてください。

記述例

<option maxMessageSize="8"/>

perfCounter

形式

<perfCounter use="true|false"/>

説明

リソース監視機能に関する指定をします。

リソース（コネクションおよびバッファ）に関する情報をWindowsのパフォーマンスカウンタに出力することで，それらの使用状況を監視できます。

この要素は省略できます。

属性

●use="true｜false"　　～《false》

コネクションおよびバッファの使用状況をパフォーマンスカウンタに出力するかどうかを指定します。

この属性は省略できます。

true：パフォーマンスカウンタに出力します。

false：パフォーマンスカウンタに出力しません。

記述例

<perfCounter use="true"/>

distributedTransaction

形式

<distributedTransaction use="true｜false"
                       optimize1PC="true｜false"
                       nodeId
                         ="MSDTC連携機能を使用するOS環境を
                           一意に識別するためのノード識別子"
                       recoverRetryInterval
                         ="トランザクションの回復処理失敗時の
                           再試行間隔"/>

説明

MSDTC連携機能の情報を設定します。

この要素はアプリケーション専用です。

この要素をトランザクションリカバリサービスの構成定義に記述した場合は無視されます。

属性

●use="true｜false"　　～《false》

MSDTC連携機能を使用するかどうかを指定します。

この属性は省略できます。

true：MSDTC連携機能を使用します。

false：MSDTC連携機能を使用しません。

●optimize1PC="true｜false"　　～《false》

単一フェーズコミット最適化を行うかどうかを指定します。

この属性は省略できます。

true：単一フェーズコミット最適化を行います。

false：単一フェーズコミット最適化を行いません。

●nodeId="MSDTC連携機能を使用するOS環境を一意に識別するためのノード識別子"　　～〈文字列〉

MSDTC連携機能を使用するOS環境を一意に識別するためのノード識別子を指定します。

MSDTC連携機能で使用するノード識別子生成コマンド（cnnnidgen）で生成したノード識別子を文字列で指定します。

アルファベットの大文字と小文字は区別しません。

同一OS上で動作するトランザクションリカバリサービスの構成定義で指定する<recoveryService>要素のnodeIdの値と必ず一致させてください。

この値が<recoveryService>要素のnodeIdの値と一致しない，またはこの値を省略した場合は，アプリケーションのトランザクション内で最初のサービス要求時にエラーとなります。

●recoverRetryInterval="トランザクションの回復処理失敗時の再試行間隔"　　～〈符号なし整数〉((1～65535))《10》（単位：秒）

アプリケーションのバックグラウンドスレッドがトランザクションの回復処理に失敗した場合の再試行間隔を指定します。

この属性は省略できます。

記述例

<distributedTransaction use="true"
                       optimize1PC="true"
                       nodeId=
                         "18AF5B57-FED5-4522-9B0B-94FBDDDD3EA4"
                       recoverRetryInterval="10"/>

recoveryService

形式

<recoveryService nodeId
                  ="MSDTC連携機能を使用するOS環境を
                    一意に識別するためのノード識別子"
                appDomainCheckInterval
                  ="アプリケーションドメイン監視間隔"
                recoverRetryInterval
                  ="トランザクションリカバリサービス
                    回復処理失敗時の再試行間隔"
                recoverCheckInterval
                  ="未決着トランザクションの存在を確認する間隔"
                recoverCheckCount
                  ="未決着トランザクションの存在を確認する回数"
                profiles
                  ="トランザクションリカバリサービス構成定義の
                    プロファイルID"
                rmidStoragePath
                  ="RMID格納ディレクトリ"/>

説明

MSDTC連携機能の情報を設定します。

この要素はトランザクションリカバリサービス専用です。

この要素をアプリケーションの構成定義に記述した場合は無視されます。

属性

●nodeId="MSDTC連携機能を使用するOS環境を一意に識別するためのノード識別子"　　～〈文字列〉

MSDTC連携機能を使用するOS環境を一意に識別するためのノード識別子です。

MSDTC連携機能で使用するノード識別子生成コマンド（cnnnidgen）で作成したノード識別子を文字列で指定します。

アルファベットの大文字と小文字は区別しません。

この値を省略した場合，トランザクションリカバリサービスの起動に失敗します。

●appDomainCheckInterval="アプリケーションドメイン監視間隔"　　～〈符号なし整数〉((1～65535))《10》（単位：秒）

アプリケーションドメイン監視間隔を指定します。

この属性は省略できます。

●recoverRetryInterval="トランザクションリカバリサービス回復処理失敗時の再試行間隔"　　～〈符号なし整数〉((1～65535))《10》（単位：秒）

トランザクションリカバリサービスの回復処理に失敗した場合の再試行間隔を指定します。

この属性は省略できます。

●recoverCheckInterval="未決着トランザクションの存在を確認する間隔"　　～〈符号なし整数〉((1～65535))《180》（単位：秒）

トランザクション回復処理の完了後，未決着トランザクションが存在しないかを確認する間隔を指定します。

この属性は省略できます。

●recoverCheckCount="未決着トランザクションの存在を確認する回数"　　～〈符号なし整数〉((1～65535))《3》

トランザクション回復処理の完了後，未決着トランザクションが存在しないかを確認する回数を指定します。

0を指定した場合，未決着トランザクションが存在しないか確認は行いません。

この属性は省略できます。

●profiles="トランザクションリカバリサービス構成定義のプロファイルID"　　～〈文字列〉

トランザクションリカバリサービスの構成定義で指定したプロファイルIDをすべてコンマ（,）区切りの文字列で指定します。

トランザクションリカバリサービスで指定する各プロファイルIDには，コンマ（,）を使用しないでください。

各プロファイルには，トランザクション回復情報を取得するための接続先となる<tp1Server>要素が指定されている必要があります。この値が指定されていない場合は<common>要素内に指定された<tp1Server>要素だけを参照します。

この値に次に示す値を指定した場合，トランザクションリカバリサービスの起動に失敗します。

空文字列（""）を指定した場合

同一名称のプロファイルIDを複数指定した場合

存在しないプロファイルIDを一つでも指定した場合

空文字列（""）のプロファイルIDを指定した場合

また，各プロファイル内の<tp1Server>要素が存在しない場合や誤りがある場合は，回復処理の実行時にエラーとなりますが処理は続行されます。

実行時のエラー情報はClient .NETのエラートレースを参照してください。

●rmidStoragePath="RMID格納ディレクトリ"　　～〈文字列〉

トランザクションリカバリサービスが未決着トランザクションの回復処理に必要な情報を保存するRMID格納ディレクトリをフルパス名で指定します。

RMID格納ディレクトリは，あらかじめ作成しておく必要があります。指定したディレクトリが存在しない場合，またはディレクトリへのアクセスに失敗した場合は，トランザクションリカバリサービスの起動に失敗します。

この属性は省略できません。

記述例

<recoveryService nodeId="18AF5B57-FED5-4522-9B0B-94FBDDDD3EA4"
                appDomainCheckInterval="10"
                recoverRetryInterval="10"
                recoverCheckInterval="180"
                recoverCheckCount="3"
                profiles="tp1Server1,tp1Server2"
                rmidStoragePath=
                  "C:¥Program Files¥Hitachi¥
                   TP1Connector for .NET Framework¥trs¥rmid"/>

定義例

MSDTC連携機能を使用しない場合

<configuration>
 <configSections>
   <section
     name="hitachi.opentp1.connector"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
   <section
     name="hitachi.opentp1.client"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
 </configSections>

 <hitachi.opentp1.connector>
   <common>
     <client conf=""/>
     <connection pooled="20" active="100"
                 threshold="80" watchtime="120"
                 failureInfoSharing="true"
                 failureCheckInterval="300"/>
       <occupation pooled="10"/>
     </connection>
     <log destination="c:¥temp¥connectorn" fileSize="1048576"
          level="1"/>
     <buffer pooling="true">
       <largestBufferPool maxCount="5"
                          threshold="100"/>
       <bufferPool size="102400" maxCount="50" threshold="120"/>
       <bufferPool size="10240" maxCount="50" threshold="150"/>
     </buffer>
     <perfCounter use="true"/>
     <option maxMessageSize="8"/>
   </common>
   <profile id="gyoumu2">
     <client conf="server2"/>
     <connection>
       <occupation pooled="10"/>
     </connection>
     <buffer pooling="true">
       <largestBufferPool maxCount="2"/>
       <bufferPool size="102400" maxCount="10"/>
     </buffer>
   </profile>
   <profile id="gyoumu3">
     <client conf="server3"/>
     <connection>
       <tcpip keepAlive="true"/>
       <occupation pooled="2"/>
     </connection>
   </profile>
 </hitachi.opentp1.connector>

 <hitachi.opentp1.client>
   <common>
     <tp1Server host="hostA"/>
     <tp1Server host="hostB"/>
     <rpc use="nam" watchTime="0"/>
     <nameService port="10000"/>
   </common>
   <profile id="traceMode">
     <errTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <methodTrace use="true" path="c:¥temp¥clientn"
                  fileSize="100000"/>
     <uapTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <dataTrace use="true" path="c:¥temp¥clientn"
                fileSize="100000"/>
   </profile>
   <profile id="server2">
     <tp1Server host="hostA"/>
     <rpc use="nam" watchTime="0"/>
     <nameService port="10000"/>
   </profile>
   <profile id="server3">
     <tcpip use="true"
            type="sendrecv"
            sendHost="hostB"
            sendPort="20000"
            openPortAtRecv="true"/>
   </profile>
 </hitachi.opentp1.client>

</configuration>

<configuration>
 <configSections>
   <section
     name="hitachi.opentp1.connector"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
   <section
     name="hitachi.opentp1.client"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
 </configSections>

 <hitachi.opentp1.connector>
   <common>
     <client conf=""/>
     <connection pooled="20" active="100"
                 threshold="80" watchtime="120"
                 failureInfoSharing="true"
                 failureCheckInterval="300"/>
       <occupation pooled="10"/>
     </connection>
     <log destination="c:¥temp¥connectorn" fileSize="1048576"
          level="1"/>
     <buffer pooling="true" create="false">
       <largestBufferPool maxCount="5"
                          threshold="100"/>
       <bufferPool size="102400" maxCount="50" threshold="120"/>
       <bufferPool size="10240" maxCount="50" threshold="150"/>
     </buffer>
     <perfCounter use="true"/>
     <option maxMessageSize="8"/>
   </common>
   <profile id="gyoumu2">
     <client conf="server2"/>
     <connection>
       <occupation pooled="10"/>
     </connection>
     <buffer pooling="true">
       <largestBufferPool maxCount="2"/>
       <bufferPool size="102400" maxCount="10"/>
     </buffer>
   </profile>
   <profile id="gyoumu3">
     <client conf="server3"/>
     <connection>
       <tcpip keepAlive="true"/>
       <occupation pooled="2"/>
     </connection>
   </profile>
 </hitachi.opentp1.connector>

 <hitachi.opentp1.client>
   <common>
     <tp1Server host="hostA"/>
     <tp1Server host="hostB"/>
     <rpc use="nam" watchTime="0"/>
     <nameService port="10000"/>
   </common>
   <profile id="traceMode">
     <errTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <methodTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <uapTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <dataTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
   </profile>
   <profile id="server2">
     <tp1Server host="hostA"/>
     <rpc use="nam" watchTime="0"/>
     <nameService port="10000"/>
   </profile>
   <profile id="server3">
     <tcpip use="true"
            type="sendrecv"
            sendHost="hostB"
            sendPort="20000"
            openPortAtRecv="true"/>
   </profile>
 </hitachi.opentp1.client>

</configuration>

MSDTC連携機能を使用した場合（アプリケーションの構成定義の設定例）

<configuration>
 <configSections>
   <section
     name="hitachi.opentp1.connector"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
   <section
     name="hitachi.opentp1.client"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
 </configSections>

 <hitachi.opentp1.connector>
   <common>
     <client conf=""/>
     <connection pooled="20" active="100"
                 threshold="80" watchtime="120"
                 failureInfoSharing="true"
                 failureCheckInterval="300"/>
       <connection pooled="10"/>
     </connection>
     <log destination="c:¥temp¥connectorn" fileSize="1048576"
          level="2"/>
     <buffer pooling="true" create="false">
       <largestBufferPool maxCount="5" threshold="100"/>
       <bufferPool size="102400" maxCount="50" threshold="120"/>
       <bufferPool size="10240" maxCount="50" threshold="150"/>
     </buffer>
     <perfCounter use="true"/>
     <option maxMessageSize="8"/>
     <distributedTransaction use="true"
       nodeId="18AF5B57-FED5-4522-9B0B-94FBDDDD3EA4"
       optimize1PC="false"
       recoverRetryInterval="10"/>
   </common>
 </hitachi.opentp1.connector>

 <hitachi.opentp1.client>
   <common>
     <tp1Server host="hostA"/>
     <rpc use="rap" watchTime="180"/>
     <rapService port="10020" autoConnect="true"/>
   </common>
   <profile id="traceMode">
     <errTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <methodTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <uapTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
     <dataTrace use="true" path="c:¥temp¥clientn"
               fileSize="100000"/>
   </profile>
 </hitachi.opentp1.client>

</configuration>

MSDTC連携機能を使用した場合（トランザクションリカバリサービスの構成定義の設定例1）

<configuration>
 <configSections>
   <section
     name="hitachi.opentp1.connector"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
           Custom=null"/>
   <section
     name="hitachi.opentp1.client"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,Culture=neutral,
           PublicKeyToken=2440cf5f0d80c91c,Custom=null"/>
 </configSections>

 <hitachi.opentp1.connector>
   <common>
     <client conf=""/>
     <connection pooled="1" active="1" watchtime="120"/>
     <log destination="c:¥temp¥connectorn¥trs" fileSize="1048576"
                level="2"/>
     <recoveryService nodeId=
                      "18AF5B57-FED5-4522-9B0B-94FBDDDD3EA4"
                      appDomainCheckInterval="10"
                      recoverRetryInterval="10"
                      recoverCheckInterval="180"
                      recoverCheckCount="3"/>
                      rmidStoragePath=
                      "C:¥Program Files¥Hitachi¥
                      TP1Connector for .NET Framework¥trs¥rmid"/>
   </common>
 </hitachi.opentp1.connector>

 <hitachi.opentp1.client>
   <common>
     <tp1Server host="hostA"/>
     <rpc use="rap" watchTime="180"/>
     <rapService port="10020" autoConnect="true"/>
     <errTrace use="true" path="c:¥temp¥clientn¥trs"
               fileSize="100000"/>
   </common>
 </hitachi.opentp1.client>

MSDTC連携機能を使用した場合（トランザクションリカバリサービスの構成定義の設定例2）

<configuration>
 <configSections>
   <section
     name="hitachi.opentp1.connector"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
     Culture=neutral,PublicKeyToken=2440cf5f0d80c91c,
     Custom=null"/>
   <section
     name="hitachi.opentp1.client"
     type="Hitachi.OpenTP1.Common.Util.ProfileSectionHandler,
           Hitachi.OpenTP1.Client,Version=7.0.0.0,
           Culture=neutral,
           PublicKeyToken=2440cf5f0d80c91c,Custom=null"/>
 </configSections>

 <hitachi.opentp1.connector>
   <common>
     <client conf=""/>
     <connection pooled="2" active="2" watchtime="120"/>
     <log destination="c:¥temp¥connectorn¥trs"
          fileSize="1048576" level="2"/>
     <recoveryService nodeId=
                      "18AF5B57-FED5-4522-9B0B-94FBDDDD3EA4"
                      appDomainCheckInterval="10"
                      recoverRetryInterval="10"
                      recoverCheckInterval="180"
                      recoverCheckCount="3"
                      rmidStoragePath=
                      "C:¥Program Files¥Hitachi¥
                      TP1Connector for .NET Framework¥trs¥rmid"/>
                      profiles="tp1Server1,tp1Server2"/>
   </common>
   <profile id="tp1Server1">
     <client conf="server1"/>
     <connection>
       <connection pooled="1"/>
     </connection>
   </profile>
   <profile id="tp1Server2">
     <client conf="server2"/>
     <connection>
       <connection pooled="1"/>
     </connection>
   </profile>
 </hitachi.opentp1.connector>

 <hitachi.opentp1.client>
   <common>
     <errTrace use="true" path="c:¥temp¥clientn¥trs"
               fileSize="100000"/>
   </common>
   <profile id="server1">
     <tp1Server host="hostA"/>
     <rpc use="rap" watchTime="180"/>
     <rapService port="10020" autoConnect="true"/>
   </profile>
   <profile id="server2">
     <tp1Server host="hostB"/>
     <rpc use="rap" watchTime="180"/>
     <rapService port="10020" autoConnect="true"/>
   </profile>
 </hitachi.opentp1.client>

3.　UAPの作成と実行

この章では，Connector .NETで使用するUAPの作成方法とサンプルプログラムの使用方法について説明します。

＜この章の構成＞

3.1　OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義

3.2　.NETインタフェース定義を使用したSPP.NETの呼び出し方法

3.3　サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

3.4　インデクスドレコードを使用したSPP.NETまたはSPPの呼び出し方法

3.5　トランザクション制御機能の使用方法

3.6　TCP/IP通信機能の使用方法

3.7　UAP作成時の注意事項

3.8　サンプルプログラムの使用方法

3.1　OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義

OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義について説明します。

＜この節の構成＞

3.1.1　.NETインタフェース定義

3.1.2　サービス定義

3.1.1　.NETインタフェース定義

.NETインタフェース定義は，次のUAPからSPP.NETに対して.NETインタフェース定義を使用してRPCを実行する場合に定義します。

SPP.NET

SUP.NET

CUP.NET（Connector .NETを利用してSPP.NETにサービスを要求するアプリケーションを含みます）

ここでは，.NETインタフェース定義の定義方法の詳細について説明します。.NETインタフェース定義を使用したRPCについては，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

＜この項の構成＞

(1)　.NETインタフェース定義の定義方法

(2)　TP1ユーザ構造体

(3)　.NETインタフェース定義の定義例

(4)　.NETインタフェース定義からXMLスキーマへのマッピング

(1)　.NETインタフェース定義の定義方法

(a)　.NETインタフェース定義に使用する言語

SPP.NETの.NETインタフェース定義は，SPP.NETを開発するプログラム言語で定義します。.NETインタフェース定義を定義する場合，次のプログラム言語が使用できます。COBOL言語は使用できません。

C#

J#※

Visual Basic

注※

Visual Studio 2008では，J#を使用して開発できません。

各プログラム言語でのインタフェースの定義文法は，Visual Studioや.NET Framework SDKのドキュメントを参照してください。

なお，.NETインタフェース定義は，Visual Studioや.NET Framework SDKが提供する各プログラム言語のコンパイラで，.NET FrameworkおよびOpenTP1 for .NET Frameworkが提供するクラスライブラリだけを参照してコンパイルできる必要があります。

(b)　.NETインタフェース定義の定義規則

SPP.NETのインタフェースを定義する場合，次の規則があります。これらの規則に従っていない場合，SPP.NETの.NETインタフェース定義として使用できません。

名前空間名，インタフェース名，メソッド名には，半角英数字および半角アンダスコア（_）が使用できます。なお，名前空間の区切り文字として半角ピリオド（.）が使用できます。

メソッドの引数および戻り値に使用できるデータ型を次の表に示します。

表3-1　メソッドの引数および戻り値で使用できるデータ型

共通型システム | プログラム言語
C# | J# | Visual Basic
System.Void※ | void | void | －
System.Byte | byte | ubyte | Byte
System.Int16 | short | short | Short
System.Int32 | int | int | Integer
System.Int64 | long | long | Long
System.String | string | String | String
System.Byte[] | byte[] | ubyte[] | Byte()
System.Int16[] | short[] | short[] | Short()
System.Int32[] | int[] | int[] | Integer()
System.Int64[] | long[] | long[] | Long()
System.String[] | string[] | String[] | String()
TP1ユーザ構造体 | － | － | －
TP1ユーザ構造体配列 | － | － | －

（凡例）

－：プログラム言語による差異はありません。

注※

System.Voidはメソッドの戻り値にだけ指定できます。

メソッドの引数に使用できるパラメタ属性を次の表に示します。

表3-2　メソッドの引数に使用できるパラメタ属性

意味 | プログラム言語
C# | J#※2 | Visual Basic
値渡し | var（省略可） | なし | ByVal（省略可）
出力渡し | out | 指定不可※1 | 指定不可※1
参照渡し | ref | Holderクラス※2 | ByRef

注※1

out属性はC#固有の属性です。C#以外では指定できません。C#以外のプログラム言語で使用する場合は，代わりに参照渡しを使用してください。

注※2

J#ではパラメタ属性の代わりにデータ型で表現します。J#では値型の参照渡しができないため，OpenTP1が提供するHolderクラスを使用してください。

OpenTP1が提供するHolderクラスを次の表に示します。

Holderクラス名 | 保持する値の型
J# | 共通型システム
Hitachi.OpenTP1.UByteHolder | ubyte | System.Byte
Hitachi.OpenTP1.ShortHolder | short | System.Int16
Hitachi.OpenTP1.IntHolder | int | System.Int32
Hitachi.OpenTP1.LongHolder | long | System.Int64
Hitachi.OpenTP1.StringHolder | String | System.String
Hitachi.OpenTP1.UByteArrayHolder | ubyte[] | System.Byte[]
Hitachi.OpenTP1.ShortArrayHolder | short[] | System.Int16[]
Hitachi.OpenTP1.IntArrayHolder | int[] | System.Int32[]
Hitachi.OpenTP1.LongArrayHolder | long[] | System.Int64[]
Hitachi.OpenTP1.StringArrayHolder | String[] | System.String[]

注1

これらのHolderクラスはJ#でだけ使用できます。C#およびVisual Basicではref，ByRefなどのパラメタ属性を使用してください。

注2

これらのHolderクラスは，メソッドの引数としてだけ使用できます。メソッドの戻り値には使用できません。

メソッド名の長さは31文字以内でなければなりません。なお，メソッド名はSPP.NETのサービス名になります。

メソッド名は英字で始まる必要があります。

メソッドのオーバロードはできません。

大文字，小文字だけが異なる同じ名称のメソッドを定義することはできません。

(2)　TP1ユーザ構造体

(a)　TP1ユーザ構造体とは

TP1ユーザ構造体は，複数の値をまとめて保持できるクラスのことです。

(b)　TP1ユーザ構造体の定義規則

TP1ユーザ構造体を定義する場合の規則を次に示します。

TP1ユーザ構造体として利用するクラスは，Hitachi.OpenTP1.TP1UserStructクラスを継承します。

デフォルトコンストラクタ（アクセス修飾子がpublicで，引数のないコンストラクタ）を持つ必要があります。

set，get両方のアクセサを持つpublicプロパティが一つ以上必要です。

大文字，小文字だけが異なる同一名称のプロパティを定義することはできません。

注意

publicプロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。

(c)　TP1ユーザ構造体のプロパティとして利用できるデータ型

TP1ユーザ構造体のプロパティとして利用できるデータ型，およびメソッドの引数として使用できるパラメタ属性を次の表に示します。

表3-3　TP1ユーザ構造体のプロパティとして利用できるデータ型

共通型システム | プログラム言語
C# | J# | Visual Basic
System.Byte | byte | ubyte | Byte
System.Int16 | short | short | Short
System.Int32 | int | int | Integer
System.Int64 | long | long | Long
System.String | string | String | String
System.Byte[] | byte[] | ubyte[] | Byte()
System.Int16[] | short[] | short[] | Short()
System.Int32[] | int[] | int[] | Integer()
System.Int64[] | long[] | long[] | Long()
System.String[] | string[] | String[] | String()
TP1ユーザ構造体 | － | － | －
TP1ユーザ構造体配列 | － | － | －

（凡例）

－：プログラム言語による差異はありません。

(d)　TP1ユーザ構造体の参照渡しの方法

TP1ユーザ構造体の参照渡しをするには，パラメタ属性を使用します。ただし，J#の場合は参照渡しができないため，Hitachi.OpenTP1.ITP1UserStructHolderを実装する必要があります。実装上の規則を次に示します。

プロパティとして利用できるデータ型はTP1ユーザ構造体，またはTP1ユーザ構造体の配列に限られます。

プロパティはset，get両方のアクセサを持ち，アクセス修飾子がpublicである必要があります。

プロパティは一つしか定義してはいけません。

実装クラスの名称規則を，次の表に示します。

プロパティのデータ型 | 実装クラスの名称
TP1ユーザ構造体 | TP1ユーザ構造体クラス名称＋"Holder"
TP1ユーザ構造体配列 | TP1ユーザ構造体クラス名称＋"ArrayHolder"

実装クラスの名前空間は，プロパティのデータ型と同じ名前空間である必要があります。

なお，プロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。TP1ユーザ構造体の参照渡しの使用例については，「(3)(b)　J#での定義例」を参照してください。

(3)　.NETインタフェース定義の定義例

(a)　C#での定義例

using System;
using Hitachi.OpenTP1;
namespace MyCompany
{

 public interface IGyoumuA
 {
   void Service1(string dataId, byte[] data);
   string[] Service2(string key);
   int Service3(int inCount, ref string[] ids);
   short Service4(MyStruct inStruct);
 }
 public class MyStruct : TP1UserStruct
 {
     private int id;
     private string name;

     public MyStruct(){}

     public int Id
     {
       set{
          id = value;
       }
       get{
          return id;
       }
     }

     public string Name
     {
        set{
           name = value;
        }
        get{
           return name;
        }
     }
 }
}

(b)　J#での定義例

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

public interface IGyoumuA
{
   void Service1(String dataId, ubyte[] data);
   String[] Service2(String key);
   int Service3(int inCount, StringArrayHolder ids);
   short Service4(MyStruct inStruct, MyStructHolder outStruct);
}

//TP1ユーザ構造体の参照渡しをするためのクラス
public class MyStructHolder implements ITP1UserStructHolder
{
  private MyStruct val;
  /** @property */
  public void set_Value(MyStruct value)
  {
         val = value;
  }
  /** @property */
  public MyStruct get_Value()
  {
         return val;
  }
}

//TP1ユーザ構造体
public class MyStruct extends TP1UserStruct
{
  private int id;
  private String name;

  public MyStruct()
  {
  }

  /** @property */
  public void set_Id(int value)
  {
         id = value;
  }
  /** @property */
  public int get_Id()
  {
         return id;
  }
  /** @property */
  public void set_Name(String value)
  {
         name = value;
  }
  /** @property */
  public String get_Name()
  {
         return name;
  }
}

(c)　Visual Basicでの定義例

Imports System
Imports Hitachi.OpenTP1
Namespace MyCompany
 Public Interface IGyoumuA
   Sub Service1(ByVal dataId As String, ByVal data() As Byte)
   Function Service2(ByVal key As String) As String()
   Function Service3(ByVal inCount As Integer, _
                     ByRef ids() As String) As Integer
   Function Service4(ByVal inStruct As MyStruct) As Short
 End Interface

 Public Class MyStruct
     Inherits TP1UserStruct
     Private idValue As Integer
     Private nameValue As String

     Public Sub New()
     End Sub

     Public Property Id() As Integer
         Set(ByVal value As Integer)
              idValue = value
         End Set
         Get
              Return idValue
         End Get
     End Property

     Public Property Name() As String
         Set(ByVal value As String)
              nameValue = value
         End Set
         Get
              Return nameValue
         End Get
     End Property
 End Class
End Namespace

(4)　.NETインタフェース定義からXMLスキーマへのマッピング

クライアントスタブ生成コマンド（if2cstub）で-Xオプションを指定して，.NETインタフェース定義からクライアントスタブを生成すると，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドがクライアントスタブに追加されます。サービスメソッドの引数および戻り値のXmlDocumentクラスに指定できるXMLの形式は，クライアントスタブと一緒に生成される入力データ用XMLスキーマおよび出力データ用XMLスキーマで定義されます。

.NETインタフェース定義のサービスメソッドの引数および戻り値は，次の図のように入力データ用XMLスキーマおよび出力データ用XMLスキーマに定義されます。入力データ用XMLスキーマのファイル名は，「〈.NETインタフェース定義のインタフェース名称〉_〈.NETインタフェース定義のサービスメソッド名称〉_InData.xsd」となり，出力データ用XMLスキーマのファイル名は，「〈.NETインタフェース定義のインタフェース名称〉_〈.NETインタフェース定義のサービスメソッド名称〉_OutData.xsd」となります。

クライアントスタブ生成コマンド（if2cstub）によって出力されるXMLスキーマは，XMLスキーマ仕様「XML Schema Definition language（XSD）1.0」に従います。なお，名前空間URIとして「http://www.w3.org/2001/XMLSchema」が指定されます。

図3-1　.NETインタフェース定義とサービスメソッド用スキーマの関係

注※

入力データ用XMLスキーマおよび出力データ用XMLスキーマに定義されたサービスメソッドごとに生成されます。

3.1.2　サービス定義

サービス定義は，次のUAPからSPP.NET，またはSPPに対してサービス定義を使用してRPCを実行する場合に定義します。

SPP.NET

SUP.NET

CUP.NET（Connector .NETを利用してSPP.NET，またはSPPにサービスを要求するアプリケーションを含みます）

サービス定義は，サービス定義のファイルとサービス定義が参照するデータ型定義のファイルから構成されます。この節では，サービス定義の定義方法の詳細について説明します。サービス定義を使用したRPCについては，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

＜この項の構成＞

(1)　データ型定義ファイル

(2)　サービス定義ファイル

(3)　サービス定義からXMLスキーマへのマッピング

(1)　データ型定義ファイル

データ型定義とは，RPCでやり取りされる入力データや出力データの形式をメッセージ単位で定義するものです。

サービス定義から参照するデータ型定義ファイルは，次に示す形式で独立したファイルとして定義します。

(a)　形式

struct データ型定義名称 {
       データ型 メンバ名称[配列指定];
   〔〔データ型 メンバ名称[配列指定];〕…〕
};
〔〔struct データ型定義名称 {
       データ型 メンバ名称[配列指定];
   〔〔データ型 メンバ名称[配列指定];〕…〕
};〕…〕

(b)　説明

●データ型定義名称　　～〈31文字以内の識別子〉

データ型定義に付ける名称を指定します。

指定された名称がカスタムレコードクラスのクラス名となります。

●データ型

メンバ名称で示される変数に対するデータ型を指定します。

クライアントスタブ生成コマンド（spp2cstub）は，定義された各メンバのデータ型を次の表に示すように，.NET Frameworkのデータ型に対応づけてカスタムレコードクラスを生成します。

また，データの内容を次の表に示すように変換します。

表3-4　データ型の変換規則と変換内容

データ型定義ファイルで定義されたデータ型
データ型の説明
カスタムレコードクラスで定義される.NET Frameworkのデータ型
データ変換の内容

char
文字列
System.String
charは.NET FrameworkのSystem.Stringに対応づけられます。カスタムレコードを入力データとして使用する場合，スタブ生成コマンドに指定したエンコード方式に従ってバイト配列に変換しデータを扱います。
バイト配列に変換した結果が32バイトで，データ型定義がchar a[30]の場合，2バイトは破棄されます。

int
32ビット符号付き整数
System.Int32
intは.NET FrameworkのSystem.Int32に対応づけられます。
カスタムレコードを入力データとして使用する場合，スタブ生成コマンドに指定されたエンディアンでバイト配列に変換して，RPCの要求メッセージに設定します。
カスタムレコードを出力データとして使用する場合，応答メッセージから4バイトをスタブ生成コマンドに指定されたエンディアンで読み込み，データにセットします。

short
16ビット符号付き整数
System.Int16
shortは.NET FrameworkのSystem.Int16に対応づけられます。カスタムレコードを入力データとして使用する場合，指定されたエンディアンでバイト配列に変換して，RPCの要求メッセージに設定します。
カスタムレコードを出力データとして使用する場合，RPCの応答メッセージから2バイトをスタブ生成コマンドに指定されたエンディアンで読み込み，データにセットします。

long
32ビット符号付き整数
System.Int32
longは.NET FrameworkのSystem.Int32に対応づけられます。
カスタムレコードを入力データとして使用する場合，スタブ生成コマンドに指定されたエンディアンでバイト配列に変換して，RPCの要求メッセージに設定します。
カスタムレコードを出力データとして使用する場合，応答メッセージから4バイトをスタブ生成コマンドに指定されたエンディアンで読み込み，データにセットします。

byte
バイナリデータ
System.Byte
byteは.NET FrameworkのSystem.Byteにマッピングします。
一次元配列指定にだけ使用できます。

struct
構造体
class（インナークラス）
データ型定義でstructとして定義されるデータ型のことを構造体と呼びます。
structはインナークラスに対応づけられます。

データ型がint，long，またはstructの場合は，先頭からのオフセットが4の整数倍でなければなりません。また，shortの場合は，先頭からのオフセットが2の整数倍でなければなりません。

なお，スタブ生成コマンドでは，自動的にバウンダリ調整をしないため，先頭からのオフセットが正しい整数倍でない場合，エラーとなるので注意が必要です。

バウンダリ調整については，「(d)　バウンダリ調整」を参照してください。

データ型がstructの場合は，次に示すように定義します。

struct 構造体名称 {
       データ型 メンバ名称[配列指定];
   〔〔データ型 メンバ名称[配列指定];〕…〕
} メンバ名称[配列指定];

データ型定義でstructとして定義されるメンバは，その構造体名称がそのままインナークラスのクラス名称になり，メンバ名称がインナークラスの型を持つプロパティ名称になります。

ここで指定するデータ型，メンバ名称，配列要素数はデータ型定義に従います。また，この構造体のデータ型定義先頭からのオフセットは，4の整数倍でなければなりません。また，構造体自身のサイズも4の整数倍でなければなりません。

ただし，構造体を構成するメンバ（構造体の中に構造体がある場合は，そのメンバも含む）がすべてcharまたはbyteの場合は，任意のオフセットおよび任意のサイズを定義できます。

データ型定義でstructとして定義される配列型は，可変長構造体配列として扱えます。可変長構造体配列については，「(e)　可変長構造体配列」を参照してください。

●構造体名称　　～〈31文字以内の識別子〉

構造体に付ける名称を指定します。

構造体名称の先頭文字は半角英字とします。2文字目以降は半角英数字および半角アンダスコア（_）が使用できます。

●メンバ名称　　～〈31文字以内の識別子〉

メンバ名称を指定します。

メンバ名称の先頭文字は半角英字で指定してください。

●配列指定

配列要素数　　～〈符号なし整数〉((1～8388608))

メンバがデータ型の配列の場合，配列要素数を指定します。

データ型がint，short，long，またはstructのときは，一次元配列が指定できます（配列指定なしも指定できます）。

データ型がbyteのときは，一次元配列だけ指定できます。

データ型がcharのときは，二次元配列まで指定できます。

一次元配列

[配列要素数]

二次元配列

[配列要素数][配列要素数]

(c)　データ型定義の定義例

struct in_data {
long I_basho[3];
long I_kakaku;
long I_tokuchou;
};

struct out_data {
char o_name[20];
char o_basho[16];
char o_tokuchou[20];
long o_kakaku;
char o_inf[80];
};

struct out_data2 {
char o_name[20];
char o_basho[16];
char o_tokuchou[20];
long o_kakaku;
char o_inf[80][20];
};

struct put_data {
int  o_num;
struct data {
 char o_name[20];
 char o_basho[16];
 char o_tokuchou[20];
 long o_kakaku;
 char o_inf[80];
} data_t[100];
};

(d)　バウンダリ調整

バウンダリ調整とは，データ型定義の各変数を決められたバイト境界に配置することをいいます。バウンダリ調整は，コンパイラが自動的に行います。

例えば，次に示すような構造体を使用している場合，先頭からのオフセットを正しくするため，実際はOS，およびコンパイラによって，dataとnumの間に1バイトの補正が入ります。

構造体の定義例

struct s_data {
   char data[3];
   long num;
} s_data_t

バウンダリ調整後の定義例

struct s_data {
 char data[3];
   <1バイト>
   long num;
} s_data_t

この例の場合には，次のように修正して使用してください。

修正前

struct s_data {
   char data[3];
   long num;
} s_data_t;

修正後

struct s_data {
   char data[3];
   char wk;
   long num;
} s_data_t;

ポイント

OpenTP1 for .NET Framework以外のOpenTP1システムで使用していた構造体をデータ型定義として使用する場合などは，バウンダリ調整に注意してください。

(e)　可変長構造体配列

データ型がstructで，配列型の場合は，可変長構造体配列として扱えます。可変長構造体配列は次に示す形式で定義します。

可変長構造体配列の形式

int 配列要素数を示すメンバ名称
struct 構造体名称 {
                  データ型 メンバ名称[配列指定];
                 〔〔データ型 メンバ名称[配列指定];〕…〕
} メンバ名称[配列要素数を示すメンバ名称:配列の最大要素数];

可変長構造体配列を指定する場合は，可変長構造体配列の配列要素数を「データ型がint型の配列要素数を示すメンバ名称:配列の最大要素数」という形式で記述します。構造体名称，データ型，メンバ名称および配列指定については，「(b)　説明」を参照してください。

可変長構造体配列の定義例

struct put_data {
                int o_num;
                struct data{
                            char o_name[20];
                            char o_basho[16];
                            char o_tokuchou[20];
                            long o_kakaku;
                            char o_inf[80];
                            } data_t[o_num:100];
                };

可変長構造体配列を使用する場合は，次の点に注意してください。

配列要素数を示すメンバ名称は可変長構造体配列より前に定義してください。

配列要素数を示すメンバ名称の値は配列の最大要素数に指定した値以下にしてください。配列要素数を示すメンバ名称の値が配列の最大要素数に指定した値を超える場合はエラーが発生します。

構造体の長さは配列の最大要素数に指定した値で計算されるので，配列の最大要素数を指定するときはデータ型定義の長さが1から8388608バイトの範囲になるように指定してください。ただし，RPC送受信メッセージの最大長拡張機能を使用しない場合は，データ型定義の長さは1から1048576バイトの範囲になるように指定してください。

生成されたカスタムレコードを使用する場合，可変長構造体配列に対応するプロパティには，配列の最大要素数以内の構造体配列を指定してください。nullまたは配列の最大要素数を超える構造体配列を指定した場合は，TP1MarshalException例外が発生します。

(f)　注意事項

データ型定義では任意の位置にコメントを記述できます。コメントは「/*」で始め，「*/」で終了します。なお，コメントのネストはできません。

データ型定義の長さは1から8388608バイトの範囲になるように記述してください。ただし，RPC送受信メッセージの最大長拡張機能を使用しない場合は，1から1048576バイトの範囲になるように記述してください。

データ型定義ファイルでは，1文を複数行にわたって指定しないでください。

データ型定義名称としてdcおよびDCで始まる名称は使用しないでください。

データ型定義名称，メンバ名称としてクライアントスタブおよびカスタムレコードクラスを生成するプログラム言語のキーワードは使用できません。

生成されたカスタムレコードを使用する場合，配列および固定長構造体配列に対応するプロパティには要素数分の配列数を指定してください。nullまたは要素数分以外の配列数を指定した場合は，TP1MarshalException例外が発生します。

一つのデータ型定義に同じ名前のメンバ名称を指定しないでください。

(2)　サービス定義ファイル

サービス定義とは，サービスの入出力データに対応するデータ型定義を定義するものです。

サービス定義ファイルは，次に示す形式で独立したファイルとして定義します。

(a)　形式

#include "データ型定義ファイル名"
〔〔#include "データ型定義ファイル名"〕
…〕

interface サービス定義名称 {
     サービス名称(入力データ型定義名, 出力データ型定義名);
 〔〔サービス名称(入力データ型定義名, 出力データ型定義名);〕…〕
}

(b)　説明

●データ型定義ファイル名　　～〈ファイル名〉

このサービス定義で参照するデータ型定義が定義されているファイル名を指定します。ファイル名は次のどちらかの形式で指定します。

拡張子を含んだファイル名だけを指定する。

相対パスまたは絶対パスを含んだファイル名で指定する。

なお，パス指定時の区切り文字には「/」または「¥」が使用できます。

●サービス定義名称　　～〈31文字以内の識別子〉

このサービス定義に付けるサービス定義名称を指定します。

任意に名称を付けることができます。デフォルトではこの名称からクライアントスタブなどのクラス名が生成されます。

●サービス名称　　～〈31文字以内の識別子〉

このサービス定義に含めるサービス名称を指定します。

対象となるユーザサーバが持つサービス名称を指定してください。

●入力データ型定義名　　～〈31文字以内の識別子〉

各サービスの入力データに対応するデータ型定義名称を指定します。

入力データ型定義名は，このサービス定義ファイルの#includeディレクティブで指定したデータ型定義ファイルで定義されたデータ型定義名称でなければなりません。

●出力データ型定義名　　～〈31文字以内の識別子〉

各サービスの出力データに対応するデータ型定義名称を指定します。

出力データ型定義名は，このサービス定義ファイルの#includeディレクティブで指定したデータ型定義ファイルで定義されたデータ型定義名称でなければなりません。

ただし，出力データがない場合は，出力データ型定義名にはDC_NODATAを指定してください（非応答型RPCの場合だけ使用できます）。

(c)　サービス定義の定義例

サービス定義の定義例1（業務1のサービス定義）

#include "mydata.h"
/* 業務1のサービス定義 */
interface GYOUMU1 {
   GETDATA1(in_data, out_data);
   GETDATA2(in_data, out_data2);
}

サービス定義の定義例2（業務2のサービス定義）

#include "datas/mydata.h"
/* 業務2のサービス定義 */
interface GYOUMU2 {
   GET_DATA1(in_data, out_data);
   PUT_DATA1(put_data, DC_NODATA);  /* 非応答型 */
}

データ型定義の定義例（mydata.h）

struct in_data {
long I_basho[3];
long I_kakaku;
};
struct out_data {
char o_name[20];
char o_basho[16];
long o_kakaku;
char o_inf[80];
};
struct out_data2 {
char o_name[20];
char o_basho[16];
long o_kakaku;
char o_inf[80][20];
};
struct put_data {
int  o_num;
struct data {
 char o_name[20];
 char o_basho[16];
 long o_kakaku;
 char o_inf[80];
} data_t[100];
};

(d)　注意事項

サービス定義では任意の位置にコメントを記述できます。コメントは「/*」で始め，「*/」で終了します。なお，コメントのネストはできません。

コメント文中に「//」は使用できません。

(3)　サービス定義からXMLスキーマへのマッピング

クライアントスタブ生成コマンド（spp2cstub）で-Xオプションを指定して，サービス定義からクライアントスタブを生成すると，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドがクライアントスタブに追加されます。サービスメソッドの引数および戻り値のXmlDocumentクラスに指定できるXMLの形式は，クライアントスタブと一緒に生成される入力データ用XMLスキーマおよび出力データ用XMLスキーマで定義されます。

データ型定義の内容を基にして，次の図のように入力データ用XMLスキーマおよび出力データ用XMLスキーマに定義されます。入力データ用XMLスキーマのファイル名は，「〈対応する入力データ型定義名称〉.xsd」となり，出力データ用XMLスキーマのファイル名は，「〈対応する出力データ型定義名称〉.xsd」となります。

クライアントスタブ生成コマンド（spp2cstub）によって出力されるXMLスキーマは，XMLスキーマ仕様「XML Schema Definition language（XSD）1.0」に従います。なお，名前空間URIとして「http://www.w3.org/2001/XMLSchema」が指定されます。

図3-2　サービス定義，データ型定義，およびサービスメソッド用スキーマの関係

注※

サービス定義で指定した入力データ型定義，出力データ型定義ごとに，入力データ用XMLスキーマ，出力データ用XMLスキーマが生成されます。

3.2　.NETインタフェース定義を使用したSPP.NETの呼び出し方法

Connector .NETのアプリケーションから.NETインタフェース定義を使用したSPP.NETを呼び出す方法について説明します。

Extension .NET，Client .NETの各UAPからの呼び出し方法については，それぞれマニュアル「TP1/Extension for .NET Framework 使用の手引」，マニュアル「TP1/Client for .NET Framework 使用の手引」の.NETインタフェース定義を使用したSPP.NETの呼び出し方法についての記述を参照してください。なお，次のプログラム言語が使用できます。COBOL言語は使用できません。

C#

J#※

Visual Basic

注※

Visual Studio 2008では，J#を使用して開発できません。

＜この節の構成＞

3.2.1　クライアントスタブの生成

3.2.2　クライアントスタブの使用方法

3.2.3　XMLスキーマの定義方法

3.2.4　.NETインタフェース定義から生成したクライアントスタブの使用例，およびXMLスキーマ例

3.2.1　クライアントスタブの生成

クライアントスタブ生成コマンド（if2cstub）を使用して，.NETインタフェース定義からクライアントスタブを生成します。

クライアントスタブは，クライアントスタブを利用するクライアントアプリケーション（Connector .NETのアプリケーション）を記述するプログラム言語で生成してください。

.NETインタフェース定義を記述したプログラム言語と生成するクライアントスタブのプログラム言語が異なる場合，クライアントスタブのメソッドの引数のパラメタ属性は次の表に従って対応づけられます。

表3-5　クライアントスタブでのパラメタ属性の対応づけ

プログラム言語とメソッドの引数のパラメタ属性（.NETインタフェース定義） | メソッドの引数のパラメタ属性（クライアントスタブ）
C# | J# | Visual Basic
C# | なし | なし | なし | ByVal
out | out | Holderクラス※1 | ByRef※1
ref | ref | Holderクラス | ByRef
J# | なし | なし | なし | ByVal
Holderクラス | ref※2 | Holderクラス | ByRef※2
Visual Basic | なし | なし | なし | ByVal
ByVal | なし | なし | ByVal
ByRef | ref | Holderクラス | ByRef

注※1

呼び出し元で値を設定しても，値はサーバに渡されません。

注※2

Holderクラスは，各Holderクラスが保持する型の参照渡しに対応づけられます。

クライアントスタブ生成コマンド（if2cstub）で-Xオプションを指定して，.NETインタフェース定義からクライアントスタブを生成すると，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドがクライアントスタブに追加されます。このサービスメソッドの名称は，「〈.NETインタフェース定義で指定されたサービスメソッド名称〉ByXml」となります。

サービスメソッドの引数および戻り値のXmlDocumentクラスに指定できるXMLの形式は，クライアントスタブと一緒に生成される入力データ用XMLスキーマおよび出力データ用XMLスキーマで定義されます。XMLスキーマの詳細については，「3.1.1(4)　.NETインタフェース定義からXMLスキーマへのマッピング」，および「3.1.2(3)　サービス定義からXMLスキーマへのマッピング」を参照してください。

.NETインタフェース定義で指定されたサービスメソッドの引数および戻り値，入力データ用XMLスキーマおよび出力データ用XMLスキーマ，ならびにクライアントスタブに追加されたサービスメソッドの引数および戻り値の関係を次の表に示します。

表3-6　.NETインタフェース定義のサービスメソッドの引数および戻り値，定義されるXMLスキーマ，ならびにクライアントスタブのサービスメソッドの引数および戻り値の関係

プログラム言語別の，サービスメソッドの引数のパラメタ属性および戻り値（.NETインタフェース定義）
定義されるXMLスキーマ
出力されるサービスメソッド（クライアントスタブ）

引数
戻り値

引数
in
C#
なし
入力データ用
XMLスキーマ
XmlDocument
XmlDocument，またはなし※2

J#
なし

Visual Basic
ByVal※1

out
C#
out
出力データ用
XMLスキーマ
XmlDocument，
またはなし※3
XmlDocument

J#
×

Visual Basic
×

inout
C#
ref
入力データ用
XMLスキーマ，
出力データ用
XMLスキーマ
XmlDocument
XmlDocument

J#
Holderクラス

Visual Basic
ByRef

戻り値
C#
－
出力データ用
XMLスキーマ
XmlDocument，またはなし※3
XmlDocument

J#
－

Visual Basic
－

（凡例）

×：指定できません。

－：該当しません。

注※1

省略できます。

注※2

.NETインタフェース定義で指定されたサービスメソッドの引数がin属性だけで，かつ戻り値がない場合，クライアントスタブに出力されるサービスメソッドの戻り値は，なしとなります。それ以外は，XmlDocumentとなります。

注※3

.NETインタフェース定義で指定されたサービスメソッドの引数に，in属性またはinout属性がない場合，クライアントスタブに出力されるサービスメソッドの引数は，なしとなります。それ以外は，XmlDocumentとなります。

3.2.2　クライアントスタブの使用方法

クライアントスタブを使用してサービス要求をする手順を次に示します。

TP1ConnectionManagerクラスのインスタンスを生成，または取り出します。
プロパティを特定のプロファイルから読み込む場合は，コンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。

TP1ConnectionManagerクラスのGetConnectionメソッドでTP1Connectionオブジェクトを取得します。
コネクションプールに使用できるコネクションがあった場合は，この時点でコネクションプールからコネクションを取り出した状態になります。

クライアントスタブをTP1Connectionクラスのインスタンスごと，およびサービスグループごとにインスタンス化します。

必要に応じてプロパティ（Flags，WatchTime）を設定します。
クライアントスタブの初期値はFlagsにRpcInfo.DCNOFLAGS，WatchTimeに-1が設定されています。Flagsプロパティ，およびWatchTimeプロパティの詳細については，RpcInfoクラスの各プロパティの説明を参照してください。

入力パラメタにデータを設定します。
XmlDocumentを引数とするサービスメソッドの場合は，引数用のXmlDocumentクラスをインスタンス化して，入力データ用XMLスキーマに従ったXML文書の内容を設定します。

サービスメソッドを呼び出します。

戻り値や出力パラメタを参照して必要な処理をします。
XmlDocumentを戻り値とするサービスメソッドの場合は，出力データ用XMLスキーマに従って，返されたXML文書の内容を参照します。

TP1ConnectionクラスのDisposeメソッドを発行して，コネクションをコネクションプールに戻します。
複数のTP1Connectionオブジェクトを使う場合は，それぞれのインスタンスが不要になった時点でCloseメソッドを発行します。

注意

ASP.NET Webアプリケーションで使用する場合，TP1ConnectionクラスのDisposeメソッドは，次の時点で必ず発行してください。

各UIイベントハンドラの終了時

Webサービスメソッドの終了時

Disposeメソッドを適切に発行しないと，メモリリークの原因となります。

また，TP1ConnectionManagerクラスはASP.NETではアプリケーション状態，またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成と削除を繰り返した場合，性能劣化やメモリ使用効率低下の原因となります。

3.2.3　XMLスキーマの定義方法

入力データ用XMLスキーマおよび出力データ用XMLスキーマの定義形式に示します。

注※

すべて同じ値が指定されます。

XML宣言ノードのversion属性には1.0，encoding属性にはutf-8が指定されます。

schema要素のelementFormDefault属性にはqualified，xmlns属性には名前空間URIとして「http://www.w3.org/2001/XMLSchema」が指定されます。

ルート要素となるelement要素のname属性には，入力データ用XMLスキーマの場合，「〈.NETインタフェース定義のインタフェース名称〉_〈.NETインタフェース定義のサービスメソッド名称〉_InData」，出力データ用XMLスキーマの場合，「〈.NETインタフェース定義のインタフェース名称〉_〈.NETインタフェース定義のサービスメソッド名称〉_OutData」が指定されます。type属性には，name属性と同じ値が指定されます。

3.のtype属性がcomplexType要素で定義されます。complexType要素のname属性には，3.のtype属性と同じ値が指定されます。

sequence要素の子要素としてelement要素が定義されます。element要素は，.NETインタフェース定義のサービスメソッドの引数，TP1ユーザ構造体のメンバ，および戻り値によって定義されます。.NETインタフェース定義のサービスメソッドの引数，TP1ユーザ構造体のメンバ，および戻り値から定義されるelement要素を表3-7に示します。

5.のelement要素のtype属性がcomplexType要素で定義されます。element要素のtype属性が配列型，およびTP1ユーザ構造体の場合に定義されるcomplexType要素を表3-8に示します。

表3-7　.NETインタフェース定義から定義されるelement要素

.NETインタフェース定義のサービスメソッドの引数，TP1ユーザ構造体のメンバ，および戻り値
入力データ用XMLスキーマおよび出力データ用XMLスキーマのelement要素

System.Byte

<xs:element minOccurs="1" maxOccurs="1"
   name="paramName※1" type="xs:unsignedByte"/>

System.Int16

<xs:element minOccurs="1" maxOccurs="1"
   name="paramName※1" type="xs:short"/>

System.Int32

<xs:element minOccurs="1" maxOccurs="1"
   name="paramName※1" type="xs:int"/>

System.Int64

<xs:element minOccurs="1" maxOccurs="1"
   name="paramName※1" type="xs:long"/>

System.String

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="xs:string"/>

System.Byte[]

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="xs:base64Binary"/>

System.Int16[]

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="ArrayOfShort※2"/>

System.Int32[]

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="ArrayOfInt※2"/>

System.Int64[]

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="ArrayOfLong※2"/>

System.String[]

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="ArrayOfString※2"/>

TP1ユーザ構造体

xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="〈TP1ユーザ構造体名〉※2"/>

TP1ユーザ構造体配列

<xs:element minOccurs="0" maxOccurs="1"
   name="paramName※1" type="ArrayOf〈TP1ユーザ構造体名〉※2"/>

注※1

クライアントスタブ生成コマンド（if2cstub）の-Xオプションにnormalを指定した場合，次の値が指定されます。

引数の場合：.NETインタフェース定義のサービスメソッドの引数の名称

TP1ユーザ構造体のメンバの場合：TP1ユーザ構造体のメンバの名称

戻り値の場合：returnValue

このXMLスキーマ例を「3.2.4(10)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにnormalを指定した場合1）」に示します。

また，-Xオプションにdatasetを指定した場合，次の値が指定されます。

引数の場合：〈complexType要素のname属性の値〉_〈.NETインタフェース定義のサービスメソッドの引数の名称〉

TP1ユーザ構造体のメンバの場合：〈complexType要素のname属性の値〉_〈TP1ユーザ構造体のメンバの名称〉

戻り値の場合：returnValue

このXMLスキーマ例を「3.2.4(11)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合1）」に示します。

注※2

クライアントスタブ生成コマンド（if2cstub）で，-Xオプションにnormalを指定した場合のXMLスキーマ例を「3.2.4(12)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにnormalを指定した場合2）」に示します。

また，クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合で，二つ以上のelement要素のtype属性が同一のcomplexType要素で定義されたとき，Connector .NETによってelement要素の数だけcomplexType要素が定義されます。element要素のtype属性の値は，「〈complexType要素のname属性の値〉〈同一のcomplexType要素を定義したtype属性が定義されているelement要素の個数の連番〉」となります。element要素の個数の連番は，0から始まり，1，2…と割り当てられます。このXMLスキーマ例を「3.2.4(13)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合2）」に示します。

表3-8　element要素のtype属性が配列型，およびTP1ユーザ構造体の場合に定義されるcomplexType要素

element要素のtype属性
入力データ用XMLスキーマおよび出力データ用XMLスキーマのcomplexType要素

ArrayOfShort
（+連番（1，2，…））

<xs:complexType name="ArrayOfShort">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="short※1" type="xs:short"/>
 </xs:sequence>
</xs:complexType>

ArrayOfInt
（+連番（1，2，…））

<xs:complexType name="ArrayOfInt">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="int※1" type="xs:int"/>
 </xs:sequence>
</xs:complexType>

ArrayOfLong
（+連番（1，2，…））

<xs:complexType name="ArrayOfLong">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="long※1" type="xs:long"/>
 </xs:sequence>
</xs:complexType>

ArrayOfString
（+連番（1，2，…））

<xs:complexType name="ArrayOfString">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="string※1" nillable="true" type="xs:string"/>
 </xs:sequence>
</xs:complexType>

TP1ユーザ構造体名
（+連番（1，2，…））

<xs:complexType name="(TP1ユーザ構造体名)">
 <xs:sequence>
   <xs:element … 省略 … />(TP1ユーザ構造体のメンバの要素※2)
             ：
 </xs:sequence>
</xs:complexType>

ArrayOf(TP1ユーザ構造体名)
（+連番（1，2，…））

<xs:complexType name="ArrayOf(TP1ユーザ構造体名)">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
       name="(TP1ユーザ構造体名)※1" nillable="true"
       type="(TP1ユーザ構造体名)"/>
 </xs:sequence>
</xs:complexType>

注※1

クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合，「〈complexType要素のname属性の値〉_〈「xs:」を除いたtype属性の値〉」が指定されます。このXMLスキーマ例を「3.2.4(14)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合3）」に示します。

注※2

.NETインタフェース定義のTP1ユーザ構造体のメンバに指定される値については，表3-7を参照してください。

3.2.4　.NETインタフェース定義から生成したクライアントスタブの使用例，およびXMLスキーマ例

クライアントスタブの使用例，およびXMLスキーマ例を次に示します。

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

サービスグループ名：GRP1

インタフェース名：MyCompany.IGyoumuA

呼び出すサービスメソッド名（サービス名）：Service3

構成ファイル：指定あり（プロファイルID="TP1Host1"）

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

＜この項の構成＞

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

(2)　入力データ用XMLスキーマ例（IGyoumuA_Service3_InData.xsd）

(3)　出力データ用XMLスキーマ例（IGyoumuA_Service3_OutData.xsd）

(4)　クライアントスタブの使用例（ASP.NET Webアプリケーション，C#の場合）

(5)　クライアントスタブの使用例（ASP.NET Webアプリケーション，J#の場合）

(6)　クライアントスタブの使用例（ASP.NET Webアプリケーション，Visual Basicの場合）

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

(12)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにnormalを指定した場合2）

(13)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合2）

(14)　XMLスキーマ例（クライアントスタブ生成コマンド（if2cstub）の-Xオプションにdatasetを指定した場合3）

3.3　サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

Connector .NETのアプリケーションからサービス定義を使用してSPP.NETまたはSPPを呼び出す方法について説明します。

Extension .NET，Client .NETの各UAPからの呼び出し方法については，それぞれマニュアル「TP1/Extension for .NET Framework 使用の手引」，マニュアル「TP1/Client for .NET Framework 使用の手引」のサービス定義を使用したSPP.NETまたはSPPの呼び出し方法についての記述を参照してください。なお，次のプログラム言語が使用できます。COBOL言語は使用できません。

C#

J#※

Visual Basic

注※

Visual Studio 2008では，J#を使用して開発できません。

＜この節の構成＞

3.3.1　クライアントスタブの生成

3.3.2　クライアントスタブの使用方法

3.3.3　XMLスキーマの定義方法

3.3.4　サービス定義から生成したクライアントスタブの使用例，およびXMLスキーマ例

3.3.1　クライアントスタブの生成

クライアントスタブ生成コマンド（spp2cstub）を使用して，サービス定義からクライアントスタブおよびカスタムレコードクラスを生成します。

クライアントスタブおよびカスタムレコードクラスは，クライアントスタブを利用するクライアントアプリケーション（Connector .NETのアプリケーション）を記述するプログラム言語で生成してください。

データ型定義で指定された各メンバは，カスタムレコードクラスのpublicプロパティとなります。

クライアントスタブ生成コマンド（spp2cstub）で-Xオプションを指定して，サービス定義からクライアントスタブを生成すると，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドがクライアントスタブに追加されます。このサービスメソッドの名称は，「〈サービス定義で指定されたサービス名称〉ByXml」となります。

サービスメソッドの引数および戻り値のXmlDocumentクラスに指定できるXMLの形式は，クライアントスタブと一緒に生成される入力データ用XMLスキーマおよび出力データ用XMLスキーマで定義されます。XMLスキーマの詳細については，「3.1.1(4)　.NETインタフェース定義からXMLスキーマへのマッピング」，および「3.1.2(3)　サービス定義からXMLスキーマへのマッピング」を参照してください。

サービス定義，入力データ用XMLスキーマおよび出力データ用XMLスキーマ，ならびにクライアントスタブに追加されたサービスメソッドの引数および戻り値の関係を次の表に示します。

表3-9　サービス定義，定義されるXMLスキーマ，ならびにクライアントスタブのサービスメソッドの引数および戻り値の関係

サービス定義 | 定義されるXMLスキーマ | 出力されるサービスメソッド（クライアントスタブ）
引数 | 戻り値
入力データ型定義 | 入力データ用XMLスキーマ | XmlDocument | －
出力データ型定義 | あり | 出力データ用XMLスキーマ | － | XmlDocument
DC_NODATA | なし | － | なし

（凡例）

－：該当しません。

3.3.2　クライアントスタブの使用方法

クライアントスタブを使用してサービス要求をする手順を次に示します。

TP1ConnectionManagerクラスのインスタンスを生成，または取り出します。
プロパティを特定のプロファイルから読み込む場合はコンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。

TP1ConnectionManagerクラスのGetConnectionメソッドでTP1Connectionオブジェクトを取得します。
コネクションプールに使用できるコネクションがあった場合は，この時点でコネクションプールからコネクションを取り出した状態になります。

クライアントスタブをTP1Connectionクラスのインスタンスごと，およびサービスグループごとにインスタンス化します。

必要に応じてプロパティ（Flags，WatchTime）を設定します。
クライアントスタブの初期値はFlagsにRpcInfo.DCNOFLAGS，WatchTimeに-1が設定されています。Flagsプロパティ，およびWatchTimeプロパティの詳細については，RpcInfoクラスの各プロパティの説明を参照してください。

カスタムレコードを引数とするサービスメソッドの場合，入力用および出力用のカスタムレコードクラスをインスタンス化します。XmlDocumentを引数とするサービスメソッドの場合，引数用のXmlDocumentクラスをインスタンス化します。

カスタムレコードを引数とするサービスメソッドの場合，入力用カスタムレコードのプロパティに入力データを設定します。XmlDocumentを引数とするサービスメソッドの場合，引数用のXmlDocumentに入力データ用XMLスキーマに従ったXML文書の内容を設定します。

サービスメソッドを呼び出します。

カスタムレコードを引数とするサービスメソッドの場合，出力用カスタムレコードのプロパティから応答データを参照します。XmlDocumentを戻り値とするサービスメソッドの場合，出力データ用XMLスキーマに従って，返されたXML文書の内容を参照します。

TP1ConnectionクラスのDisposeメソッドを発行して，コネクションをコネクションプールに戻します。
複数のTP1Connectionオブジェクトを使う場合は，それぞれのインスタンスが不要になった時点でDisposeメソッドを発行します。

注意

ASP.NET Webアプリケーションで使用する場合，TP1ConnectionクラスのDisposeメソッドを，次の時点で必ず発行してください。

各UIイベントハンドラの終了時

Webサービスメソッドの終了時

Disposeメソッドを適切に発行しないと，メモリリークの原因となります。

また，TP1ConnectionManagerクラスは，ASP.NETではアプリケーション状態，またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成と削除を繰り返した場合，性能劣化やメモリ使用効率低下の原因となります。

3.3.3　XMLスキーマの定義方法

入力データ用XMLスキーマおよび出力データ用XMLスキーマの定義形式を次に示します。

注※

すべて同じ値が指定されます。

XML宣言ノードのversion属性には1.0，encoding属性にはutf-8が指定されます。

schema要素のelementFormDefault属性にはqualified，xmlns属性には名前空間URIとして「http://www.w3.org/2001/XMLSchema」が指定されます。

ルート要素となるelement要素のname属性には，入力データ用XMLスキーマの場合，「入力データ型定義名称」または「出力データ型定義名称」が指定されます。type属性には，name属性と同じ値が指定されます。

3.のtype属性がcomplexType要素で定義されます。complexType要素のname属性には，3.のtype属性と同じ値が指定されます。

sequence要素の子要素としてelement要素が定義されます。element要素は，入力データ型定義または出力データ型定義のメンバ，および構造体のメンバによって定義されます。データ型定義のメンバおよび構造体のメンバから定義されるelement要素を表3-10に示します。

5.のelement要素のtype属性がcomplexType要素で定義されます。element要素のtype属性が配列型，および構造体の場合に定義されるcomplexType要素を表3-11に示します。

表3-10　データ型定義から定義されるelement要素

データ型定義のメンバおよび構造体のメンバのデータ型
入力データ用XMLスキーマおよび出力データ用XMLスキーマのelement要素

char

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="xs:string"/>

int

<xs:element minOccurs="1" maxOccurs="1"
   name="memberName※1" type="xs:int"/>

short

<xs:element minOccurs="1" maxOccurs="1"
   name="memberName※1" type="xs:short"/>

long

<xs:element minOccurs="1" maxOccurs="1"
   name="memberName※1" type="xs:int"/>

struct

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="(構造体名称)"/>

char[]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="xs:string"/>

int[]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="ArrayOfInt※2"/>

short[]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="ArrayOfShort※2"/>

long[]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="ArrayOfInt※2"/>

struct[]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="ArrayOf(構造体名称)※2"/>

char[][]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="ArrayOfString※2"/>

byte[]

<xs:element minOccurs="0" maxOccurs="1"
   name="memberName※1" type="xs:base64Binary"/>

注※1

クライアントスタブ生成コマンド（spp2cstub）で-Xオプションにnormalを指定した場合，データ型定義のメンバの名称が指定されます。このXMLスキーマ例を「3.3.4(11)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにnormalを指定した場合1）」に示します。

また，-Xオプションにdatasetを指定した場合，〈complexType要素のname属性の値〉_〈データ型定義のメンバの名称〉が指定されます。このXMLスキーマ例を「3.3.4(12)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合1）」に示します。

注※2

クライアントスタブ生成コマンド（spp2cstub）で，-Xオプションにnormalを指定した場合のXMLスキーマ例を「3.3.4(13)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにnormalを指定した場合2）」に示します。

また，クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合で，二つ以上のelement要素のtype属性が同一のcomplexType要素で定義されたとき，Connector .NETによってelement要素の数だけcomplexType要素が定義されます。element要素のtype属性の値は，「〈complexType要素のname属性の値〉〈同一のcomplexType要素を定義したtype属性が定義されているelement要素の個数の連番〉」となります。element要素の個数の連番は，0から始まり，1，2…と割り当てられます。このXMLスキーマ例を「3.3.4(14)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合2）」に示します。

表3-11　element要素のtype属性が配列型，および構造体の場合に定義されるcomplexType要素

element要素のtype属性
入力データ用XMLスキーマおよび出力データ用XMLスキーマのcomplexType要素

ArrayOfInt
（+連番（1，2，…））

<xs:complexType name="ArrayOfInt">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="int※1" type="xs:int"/>
 </xs:sequence>
</xs:complexType>

ArrayOfShort
（+連番（1，2，…））

<xs:complexType name="ArrayOfShort">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="short※1" type="xs:short"/>
 </xs:sequence>
</xs:complexType>

ArrayOfString
（+連番（1，2，…））

<xs:complexType name="ArrayOfString">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="string※1" nillable="true" type="xs:string"/>
 </xs:sequence>
</xs:complexType>

構造体名
（+連番（1，2，…））

<xs:complexType name="(構造体名)">
 <xs:sequence>
   <xs:element … 省略 … /> (構造体のメンバの要素※2)
             ：
 </xs:sequence>
</xs:complexType>

ArrayOf(構造体名)
（+連番（1，2，…））

<xs:complexType name="ArrayOf(構造体名)">
 <xs:sequence>
   <xs:element minOccurs="0" maxOccurs="unbounded"
     name="(構造体名)" nillable="true"type="(構造体名)"/>
 </xs:sequence>
</xs:complexType>

注※1

クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合，「〈complexType要素のname属性の値〉_〈「xs:」を除いたtype属性の値〉」が指定されます。このXMLスキーマ例を「3.3.4(15)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合3）」に示します。

注※2

データ型定義の構造体のメンバに指定される要素については，表3-10を参照してください。

3.3.4　サービス定義から生成したクライアントスタブの使用例，およびXMLスキーマ例

クライアントスタブの使用例，およびXMLスキーマ例を次に示します。

この例で呼び出すSPPのサービスの情報は次のとおりです。

サービスグループ名：SVGRP1

サービス定義名称：GYOUMU1

呼び出すサービス名（サービス名）：GETDATA1

入力用カスタムレコードクラス名：in_data

出力用カスタムレコードクラス名：out_data

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

＜この項の構成＞

(1)　サービス定義の定義例

(2)　カスタムレコードクラスの出力例（C#の場合，in_data.cs）

(3)　入力データ用XMLスキーマ例（in_data.xsd）

(4)　出力データ用XMLスキーマ例（out_data.xsd）

(5)　クライアントスタブの使用例（ASP.NET Webアプリケーション，C#の場合）

(6)　クライアントスタブの使用例（ASP.NET Webアプリケーション，J#の場合）

(7)　クライアントスタブの使用例（ASP.NET Webアプリケーション，Visual Basicの場合）

(8)　クライアントスタブの使用例（ASP.NET Webアプリケーション，C#，RPCデータのXMLマッピング機能を使用した場合）

(9)　クライアントスタブの使用例（ASP.NET Webアプリケーション，J#，RPCデータのXMLマッピング機能を使用した場合）

(10)　クライアントスタブの使用例（ASP.NET Webアプリケーション，Visual Basic，RPCデータのXMLマッピング機能を使用した場合）

(11)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにnormalを指定した場合1）

(12)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合1）

(13)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにnormalを指定した場合2）

(14)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合2）

(15)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合3）

(1)　サービス定義の定義例

(a)　サービス定義の定義例（業務1のサービス定義）

#include "mydata.h"
/* 業務1のサービス定義 */
interface GYOUMU1 {    
   GETDATA1(in_data, out_data);
   GETDATA2(in_data, out_data2);
}

(b)　データ型定義の定義例（mydata.h）

struct in_data {
      long i_basho[3];
      long i_kakaku;
};
struct out_data {
      char o_name[20];
      char o_basho[16];
      long o_kakaku;
      char o_inf[80];
};
struct out_data2 {
      int o_count;
      struct data {
             char o_name[20];
             char o_basho[16];
             long o_kakaku;
             char o_inf[80];
      } data_t[100];
};

(2)　カスタムレコードクラスの出力例（C#の場合，in_data.cs）

using Hitachi.OpenTP1.Common;

namespace MyCompany
{
   public class in_data : RecordImpl
   {
       public in_data() : base("default")
       {
           …
       }
       public in_data(string recordName) : base(recordName)
       {
           …
       }
       …
       private int[] _I_basho;
       public int[] I_basho
       {
           get
           {
               return _I_basho;
           }
           set
           {
               _I_basho = value;
           }
       }

       private int _I_kakaku = 0;
       public int I_kakaku
       {
           get
           {
               return _I_kakaku;
           }
           set
           {
               _I_kakaku = value;
           }
       }
       …
   }
}

(3)　入力データ用XMLスキーマ例（in_data.xsd）

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="in_data" type="in_data" />
 <xs:complexType name="in_data">
   <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="1" name="i_basho"
      type="ArrayOfInt" />
     <xs:element minOccurs="1" maxOccurs="1" name="i_kakaku"
      type="xs:int" />
   </xs:sequence>
 </xs:complexType>
 <xs:complexType name="ArrayOfInt">
   <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="unbounded"
      name="int" type="xs:int" />
   </xs:sequence>
 </xs:complexType>
</xs:schema>

(4)　出力データ用XMLスキーマ例（out_data.xsd）

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="out_data" type="out_data" />
 <xs:complexType name="out_data">
   <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="1" name="o_name"
      type="xs:string" />
     <xs:element minOccurs="0" maxOccurs="1" name="o_basho"
      type="xs:string" />
     <xs:element minOccurs="1" maxOccurs="1" name="o_kakaku"
      type="xs:int" />
     <xs:element minOccurs="0" maxOccurs="1" name="o_inf"
      type="xs:string" />
   </xs:sequence>
 </xs:complexType>
</xs:schema>

(5)　クライアントスタブの使用例（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) クライアントスタブの生成
       GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1");
       // (4) RPC呼び出し形態
       server.Flags = RpcInfo.DCNOFLAGS;
       // (4) 最大応答待ち時間
       server.WatchTime = 180;
       // (5) 入力用カスタムレコードの生成
       in_data inRecord = new in_data();
       // (5) 出力用カスタムレコードの生成
       out_data outRecord = new out_data();
       inRecord.i_basho[0] = 56;  // (6) 入力データの設定
       inRecord.i_basho[1] = 43;  // (6) 入力データの設定
       inRecord.i_basho[2] = 18;  // (6) 入力データの設定
       // (7) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord);
       // (8) 応答データの取り出し
       this.textBox1.Text = outRecord.o_name.Trim();
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // その他スタブなどが検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (9) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
 }
}

(6)　クライアントスタブの使用例（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) クライアントスタブの生成
       GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1");
       // (4) RPC呼び出し形態
       server.set_Flags(RpcInfo.DCNOFLAGS);
       // (4) 最大応答待ち時間
       server.set_WatchTime(180);
       // (5) 入力用カスタムレコードの生成
       in_data inRecord = new in_data();
       // (5) 出力用カスタムレコードの生成
       out_data outRecord = new out_data();
       inRecord.get_i_basho()[0] = 56;  // (6) 入力データの設定
       inRecord.get_i_basho()[1] = 43;  // (6) 入力データの設定
       inRecord.get_i_basho()[2] = 18;  // (6) 入力データの設定
       // (7) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord);
       // (8) 応答データの取り出し
       this.textBox1.set_Text(outRecord.get_o_name().Trim());
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // その他スタブなどが検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (9) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
}

(7)　クライアントスタブの使用例（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(2) As String
     ' このボタンがクリックされたら
     ' OpenTP1<TP1Host1>のサービス要求を行う
     Try
     ' グローバル変数のアプリケーション状態から
     ' TP1ConnectionManagerを取得
       ' (1) TP1ConnectionManagerクラスの生成
       tcm = CType(Application("tcmTP1Host1"), _
                   TP1ConnectionManager)
       ' (2) TP1Connectionオブジェクトの取得
       tc = tcm.GetConnection()
       ' (3) クライアントスタブの生成
       Dim server As GYOUMU1Stub = New GYOUMU1Stub(tc, "SVGRP1")
       ' (4) RPC呼び出し形態
       server.Flags = RpcInfo.DCNOFLAGS
       ' (4) 最大応答待ち時間
       server.WatchTime = 180
       ' (5) 入力用カスタムレコードの生成
       Dim inRecord As in_data = New in_data
       ' (5) 出力用カスタムレコードの生成
       Dim outRecord As out_data = New out_data
       inRecord.i_basho(0) = 56  ' (6) 入力データの設定
       inRecord.i_basho(1) = 43  ' (6) 入力データの設定
       inRecord.i_basho(2) = 18  ' (6) 入力データの設定
       ' (7) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord)
       ' (8) 応答データの取り出し
       textBox1.Text = outRecord.o_name.Trim()
     Catch exp As TP1ConnectorException
       ' Connector .NETが検知したエラー
     Catch exp As TP1Exception
       ' その他スタブなどが検知したエラー
     Catch exp As Exception
       ' 予期しない例外
     Finally
       If Not(tc Is Nothing) Then
       ' (9) コネクションをコネクションプールに戻す
       tc.Dispose()
     End If
     End Try
   End Sub
 End Class
End Namespace

(8)　クライアントスタブの使用例（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) クライアントスタブの生成
       GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1");
       // (4) RPC呼び出し形態
       server.Flags = RpcInfo.DCNOFLAGS;
       // (4) 最大応答待ち時間
       server.WatchTime = 180;
       // (5) 入力用カスタムレコードの生成
       XmlDocument inDoc = GetInputData();
       // (6) 入力データの設定
       inDoc.SelectSingleNode(
         "/in_data/i_basho[1]").InnerText = "56";
       // (6) 入力データの設定
       inDoc.SelectSingleNode(
         "/in_data/i_basho[2]").InnerText = "43";
       // (6) 入力データの設定
       inDoc.SelectSingleNode(
         "/in_data/i_basho[3]").InnerText = "18";
       // (7) GETDATA1ByXmlを呼び出す
       XmlDocument outDoc = server.GETDATA1ByXml(inDoc);
       // (8) 応答データの取り出し
       this.textBox1.Text =
         outDoc.SelectSingleNode("/out_data/o_name"
                                 ).InnerText.Trim();
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // その他スタブなどが検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (9) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
 }
}

(9)　クライアントスタブの使用例（ASP.NET Webアプリケーション，J#，RPCデータのXMLマッピング機能を使用した場合）

package MyCompany;
import System.*;
import System.Xml.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Connector.*;

 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) クライアントスタブの生成
       GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1");
       // (4) RPC呼び出し形態
       server.set_Flags(RpcInfo.DCNOFLAGS);
       // (4) 最大応答待ち時間
       server.set_WatchTime(180);
       // (5) 入力用カスタムレコードの生成
       XmlDocument inDoc = GetInputData();
       // (6) 入力データの設定
       inDoc.SelectSingleNode(
         "/in_data/i_basho[1]").set_InnerText("56");
       // (6) 入力データの設定
       inDoc.SelectSingleNode(
         "/in_data/i_basho[2]").set_InnerText("43");
       // (6) 入力データの設定
       inDoc.SelectSingleNode(
         "/in_data/i_basho[3]").set_InnerText("18");
       // (7) GETDATA1ByXmlを呼び出す
       XmlDocument outDoc = server.GETDATA1ByXml(inDoc);
       // (8) 応答データの取り出し
       this.textBox1.set_Text(
       outDoc.SelectSingleNode("/out_data/o_name"
                               ).get_InnerText().Trim());
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // その他スタブなどが検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (9) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
}

(10)　クライアントスタブの使用例（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(2) 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 GYOUMU1Stub = _
         New GYOUMU1Stub(tc, "SVGRP1")
       ' (4) RPC呼び出し形態
       server.Flags = RpcInfo.DCNOFLAGS
       ' (4) 最大応答待ち時間
       server.WatchTime = 180
       ' (5) 入力用カスタムレコードの生成
       inDoc = GetInputData()
       ' (6) 入力データの設定
       inDoc.SelectSingleNode( _
         "/in_data/i_basho[1]").InnerText = "56"
       ' (6) 入力データの設定
       inDoc.SelectSingleNode( _
         "/in_data/i_basho[2]").InnerText = "43"
       ' (6) 入力データの設定
       inDoc.SelectSingleNode( _
         "/in_data/i_basho[3]").InnerText = "18"
       ' (7) GETDATA1ByXmlを呼び出す
       outDoc = server.GETDATA1ByXml(inDoc)
       ' (8) 応答データの取り出し
       textBox1.Text = _
         outDoc.SelectSingleNode("/out_data/o_name" _
                                 ).InnerText.Trim()
       Catch exp As TP1ConnectorException
       ' Connector .NETが検知したエラー
       Catch exp As TP1Exception
       ' その他スタブなどが検知したエラー
       Catch exp As Exception
       ' 予期しない例外
     Finally
       If Not(tc Is Nothing) Then
       ' (9) コネクションをコネクションプールに戻す
       tc.Dispose()
     End If
     End Try
   End Sub
 End Class
End Namespace

(11)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにnormalを指定した場合1）

(12)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合1）

(13)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにnormalを指定した場合2）

(14)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合2）

(15)　XMLスキーマ例（クライアントスタブ生成コマンド（spp2cstub）の-Xオプションにdatasetを指定した場合3）

3.4　インデクスドレコードを使用したSPP.NETまたはSPPの呼び出し方法

Connector .NETのアプリケーションからインデクスドレコードを使用してSPP.NETまたはSPPを呼び出す方法について説明します。なお，次のプログラム言語が使用できます。

C#

J#※

Visual Basic

COBOL言語

注※

Visual Studio 2008では，J#を使用して開発できません。

＜この節の構成＞

3.4.1　インデクスドレコードを使用する場合のメソッドの発行手順

3.4.2　インデクスドレコードを使用してRPC要求をする場合のコーディング例

3.4.3　インデクスドレコードとバッファプーリング機能を使用する場合のメソッド発行手順

3.4.4　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例

3.4.1　インデクスドレコードを使用する場合のメソッドの発行手順

インデクスドレコードを使用してRPC要求をする場合のメソッド発行手順を次に示します。

TP1ConnectionManagerクラスのインスタンスを生成または取り出します。
プロパティを特定のプロファイルから読み込む場合は，コンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。

TP1ConnectionManagerクラスのGetConnectionメソッドでTP1Connectionオブジェクトを取得します。
コネクションプールに使用できるコネクションがあった場合は，この時点でコネクションプールからコネクションを取り出した状態になります。

RpcInfoクラスのインスタンスを生成します。

RpcInfoオブジェクトにサービス名，サービスグループ名，タイムアウト値，RPC形態フラグなどを設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して入力用インデクスドレコードを生成します。

入力用インデクスドレコードに入力データを設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して出力用インデクスドレコードを生成します。

出力データ用領域を確保して，出力用インデクスドレコードに設定します。

TP1ConnectionクラスのExecuteメソッドを発行してRPC要求をします（何度でも発行できます）。
再度RPC要求をする場合は，4.～9.のどれかから行います。
各オブジェクトは複数回のRPC要求で再利用できます。

出力用インデクスドレコードからデータを取り出します。

TP1ConnectionクラスのDisposeメソッドを発行して，コネクションをコネクションプールに戻します。

注意

ASP.NET Webアプリケーションで使用する場合，TP1ConnectionクラスのDisposeメソッドは，次の時点で必ず発行してください。

各UIイベントハンドラの終了時

Webサービスメソッドの終了時

Disposeメソッドを適切に発行しないと，メモリリークの原因となります。

また，TP1ConnectionManagerクラスはASP.NETではアプリケーション状態，またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成と削除を繰り返した場合，性能劣化やメモリ使用効率低下の原因となります。

3.4.2　インデクスドレコードを使用してRPC要求をする場合のコーディング例

インデクスドレコードを使用してRPC要求をする場合の，ASP.NET Webアプリケーションでの使用例を次に示します。

コメント中の(1)，(2)などは「3.4.1　インデクスドレコードを使用する場合のメソッドの発行手順」の説明の番号に対応しています。

＜この項の構成＞

(1)　ASP.NETでの初期化／終了コードの例1（グローバル変数使用，Global.asax）

(2)　ASP.NETでの初期化／終了コードの例2（グローバル変数使用，Global.asax.cs）

(3)　ASP.NETでの初期化／終了コードの例3（ローカル変数使用，Global.asax）

(4)　ASP.NETでの初期化／終了コードの例4（ローカル変数使用，Global.asax.cs）

(5)　インデクスドレコードを使用してRPC要求をする場合のコーディング例（C#の場合）

(6)　インデクスドレコードを使用してRPC要求をする場合のコーディング例（COBOL言語の場合）

(1)　ASP.NETでの初期化／終了コードの例1（グローバル変数使用，Global.asax）

<script language="C#" runat="server">
    public void Application_OnStart() {
      this.Application["tcmServerA"] =
           new TP1ConnectionManager("ServerA");
    }
    public void Application_OnEnd() {
      this.Application["tcmServerA"] = null;
    }
</script>

(2)　ASP.NETでの初期化／終了コードの例2（グローバル変数使用，Global.asax.cs）

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;

namespace webapp2
{
 public class Global : System.Web.HttpApplication
 {
   …
   protected void Application_Start(Object sender, EventArgs e)
   {
     this.Application["tcmServerA"] =
          new TP1ConnectionManager("ServerA");
   }
   protected void Application_End(Object sender, EventArgs e)
   {
     this.Application["tcmServerA"] = null;
   }
 }
}

(3)　ASP.NETでの初期化／終了コードの例3（ローカル変数使用，Global.asax）

<script language="C#" runat="server">
  protected TP1ConnectionManager tcm;
  public override void Init() {
     this.tcm = new TP1ConnectionManager("ServerA");
  }
  public override void Dispose() {
     this.tcm = null;
  }
</script>

(4)　ASP.NETでの初期化／終了コードの例4（ローカル変数使用，Global.asax.cs）

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;

namespace webapp2
{
 public class Global : System.Web.HttpApplication
 {
   …
   protected TP1ConnectionManager tcm;
   public override void Init() {
     this.tcm = new TP1ConnectionManager("ServerA");
   }
   public override void Dispose() {
     this.tcm = null;
   }
 }
}

(5)　インデクスドレコードを使用してRPC要求をする場合のコーディング例（C#の場合）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Connector;
using MyCompany;

namespace MyCompany
{
 public class MyForm1 : System.Web.UI.Page
 {
   …
   private void Button1_Click(object sender, System.EventArgs e)
   {
     // このボタンがクリックされたら
     //  OpenTP1<ServerA>のサービス要求を行う
     // グローバル変数のアプリケーション状態から
     //  TP1ConnectionManagerを取得する
     // (1) TP1ConnectionManagerクラスの生成
     TP1ConnectionManager tcm =
        (TP1ConnectionManager)this.Application["tcmServerA"];
     // (2) TP1Connectionオブジェクトの取得
     TP1Connection tc = tcm.GetConnection();
     try {
       Encoding enc = Encoding.Default;
       // (3) RpcInfoクラスの生成
       RpcInfo ixSpec = new RpcInfo();
       // (4) サービスグループ名
       ixSpec.ServiceGroupName = "SVGRP1";
       // (4) サービス名
       ixSpec.ServiceName = "SERV1";
       // (4) RPC呼び出し形態
       ixSpec.Flags = RpcInfo.DCNOFLAGS;
       // (4) 最大応答待ち時間
       ixSpec.WatchTime = 180;
       // (5) 入力用インデクスドレコードの生成
       IndexedRecord input =
                     tcm.CreateIndexedRecord("in_record");
       // (6) 入力データの設定
       string indata = "Say Hello to OpenTP1!";
       // (6) 入力データの設定
       input.Add(enc.GetBytes(indata));
       // (7) 出力用インデクスドレコードの生成
       IndexedRecord output =
                     tcm.CreateIndexedRecord("out_record");
       // (8) 出力データ用領域の設定
       output.Add(new byte[this.textBox1.MaxLength*2]);
       // (9) RPCの実行
       bool ret = tc.Execute(ixSpec, input, output);
       // (10) データの取り出し
       byte[] outBuf = (byte[])output[0];
       // (10) データの取り出し
       this.textBox1.Text = enc.GetString(outBuf);
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // Connector .NET（OpenTP1共通クラス）が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (11) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
 }
}

(6)　インデクスドレコードを使用してRPC要求をする場合のコーディング例（COBOL言語の場合）

>>PROPAGATE OFF
>>WEBSERVICE
>>WEBSERVICE-NAME 'MyWebService1'
>>WEBSERVICE-DESCRIPTION 'Sample of OpenTP1'
>>WEBSERVICE-NAMESPACE 'http://tempuri.org/'
>>END-WEBSERVICE
IDENTIFICATION DIVISION.
CLASS-ID. MyWebService1 AS 'MyCompany.MyWebService1'
IS PUBLIC INHERITS WEBSERVICE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS WEBSERVICE AS 'System.Web.Services.WebService'.
 CLASS SYSTEMEXCEPTION AS 'System.Exception'.
 CLASS TP1EXCEPTION AS
    'Hitachi.OpenTP1.TP1Exception'.
 CLASS TP1CONNECTIONMANAGER AS
    'Hitachi.OpenTP1.Connector.TP1ConnectionManager'.
 CLASS TP1CONNECTION AS
    'Hitachi.OpenTP1.Connector.TP1Connection'.
 CLASS INDEXEDRECORD AS
    'Hitachi.OpenTP1.Connector.IndexedRecord'.
 CLASS RPCINFO AS 'Hitachi.OpenTP1.Connector.RpcInfo'.
 CLASS BYTE-ARRAY  AS 'System.Byte' IS ARRAY.
 CLASS OBJECT-CLS  AS 'System.Object'.
 CLASS CONVERT     AS 'System.Convert'.
 PROPERTY SERVICEGROUPNAME AS 'ServiceGroupName'.
 PROPERTY SERVICENAME      AS 'ServiceName'.
 PROPERTY FLAGS            AS 'Flags'.
 PROPERTY WATCHTIME        AS 'WatchTime'.
IDENTIFICATION DIVISION.
OBJECT.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  SERVICE-GROUP        PIC X(6) VALUE 'SVGRP1'.
01  SERVICE-NAME         PIC X(5) VALUE 'SERV1'.
PROCEDURE DIVISION.
>>WEBMETHOD
>>WEBMETHOD-DESCRIPTION 'SERVICE1'
>>WEBMETHOD-ENABLESESSION FALSE
>>WEBMETHOD-CACHEDURATION 0
>>WEBMETHOD-BUFFERRESPONSE TRUE
>>END-WEBMETHOD
IDENTIFICATION DIVISION.
METHOD-ID. SERVICE1 IS PUBLIC.
ENVIRONMENT DIVISION.
DATA DIVISION.
LOCAL-STORAGE SECTION.
01  IN-REC           PIC X(20) VALUE SPACE.
01  IN-REC-LEN       PIC S9(9) COMP-5 VALUE 20.
01  OUTDATA          PIC X(20) VALUE SPACE.
01  OUT-REC-LEN      PIC S9(9) COMP-5 VALUE 20.
01  TCNMGR    USAGE OBJECT REFERENCE TP1CONNECTIONMANAGER.
01  TCX       USAGE OBJECT REFERENCE TP1CONNECTION.
01  INRECORD  USAGE OBJECT REFERENCE INDEXEDRECORD.
01  OUTRECORD USAGE OBJECT REFERENCE INDEXEDRECORD.
01  RIF       USAGE OBJECT REFERENCE RPCINFO.
01  OBJECT-OBJ OBJECT REFERENCE OBJECT-CLS.
01  SERVICE-GROUP-STR    USAGE STRING.
01  SERVICE-NAME-STR     USAGE STRING.
01  IN-RECORD-NAME-STR   USAGE STRING.
01  OUT-RECORD-NAME-STR  USAGE STRING.
01  IN-RECORD-NAME       PIC X(10) VALUE 'in_record'.
01  OUT-RECORD-NAME      PIC X(10) VALUE 'out_record'.
01  INDATA-ARRAY   OBJECT REFERENCE BYTE-ARRAY.
01  OUTDATA-ARRAY  OBJECT REFERENCE BYTE-ARRAY.
01  RPC-FLAGS      USAGE BINARY-LONG VALUE 0.
01  WATCH-TIME     USAGE BINARY-LONG VALUE -1.
01  RST-INDEX      USAGE BINARY-LONG VALUE 0.
01  RESULT         USAGE LOGICAL.
01  OUTDATA-LEN    PIC S9(9) COMP-5.
01  TMP-LEN        USAGE BINARY-LONG.
01  OUTLEN-INDEX   USAGE BINARY-LONG VALUE 1.
LINKAGE SECTION.
01  SENDMSG  USAGE STRING.
01  RECVMSG  USAGE STRING.
PROCEDURE DIVISION USING BY VALUE SENDMSG RETURNING RECVMSG.
DECLARATIVES.
TP1-EXCEPTION SECTION.
 USE AFTER EO TP1EXCEPTION.
* Connector .NET（OpenTP1共通クラス）が検知したエラー
 RESUME METHOD-END.
ERROR-HANDLER1 SECTION.
 USE AFTER EO SYSTEMEXCEPTION.
*  予期しない例外
 RESUME METHOD-END.
END DECLARATIVES.
MAIN-PROC.
*    TP1ConnectionManagerのインスタンスを生成
    INVOKE TP1CONNECTIONMANAGER 'New' RETURNING TCNMGR.
*    TP1ConnectionManager.GetConnection()でTP1Connectionを取得します
    INVOKE TCNMGR 'GetConnection' RETURNING TCX.
*    TP1ConnectionManager.CreateIndexedRecord()を発行して
*    入力用インデクスドレコードを生成します
    SET IN-RECORD-NAME-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(IN-RECORD-NAME).
    INVOKE TCNMGR 'CreateIndexedRecord'
       USING BY VALUE IN-RECORD-NAME-STR
       RETURNING INRECORD.
*    TP1ConnectionManager.CreateIndexedRecord()を発行して
*    出力用インデクスドレコードを生成します
    SET OUT-RECORD-NAME-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(OUT-RECORD-NAME).
    INVOKE TCNMGR 'CreateIndexedRecord'
       USING BY VALUE OUT-RECORD-NAME-STR
       RETURNING OUTRECORD.
*    入力用インデクスドレコードに入力データを設定します
    INVOKE BYTE-ARRAY 'New' USING BY VALUE IN-REC-LEN
                        RETURNING INDATA-ARRAY.
    MOVE FUNCTION STRING-TO-ALPHANUMERIC(SENDMSG)
     TO IN-REC.
    CALL 'CBLXTOBYTEARRAY' USING IN-REC INDATA-ARRAY
                            IN-REC-LEN.
    INVOKE INRECORD 'Add' USING BY VALUE
                         INDATA-ARRAY AS OBJECT-CLS
                      RETURNING RST-INDEX.
*    出力データ用領域を確保して出力用インデクスドレコードに設定します
    INVOKE BYTE-ARRAY 'New' USING BY VALUE OUT-REC-LEN
                   RETURNING OUTDATA-ARRAY.
    INVOKE OUTRECORD 'Add' USING BY VALUE
                          OUTDATA-ARRAY AS OBJECT-CLS
                       RETURNING RST-INDEX.
*    RpcInfoのインスタンスを生成します
    INVOKE RPCINFO 'New' RETURNING RIF.
*    RpcInfoオブジェクトにサービスグループ名を設定します
    SET SERVICE-GROUP-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(SERVICE-GROUP).
    SET SERVICEGROUPNAME OF RIF TO SERVICE-GROUP-STR.
*    RpcInfoオブジェクトにサービス名を設定します
    SET SERVICE-NAME-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(SERVICE-NAME).
    SET SERVICENAME OF RIF TO SERVICE-NAME-STR.
*    RpcInfoオブジェクトにRPC呼び出し形態を設定します
    MOVE RPC-FLAGS TO FLAGS OF RIF.
*    RpcInfoオブジェクトに最大応答待ち時間を設定します
    MOVE WATCH-TIME TO WATCHTIME OF RIF.
*    TP1Connection.Execute()を発行してRPC要求を行います
    INVOKE TCX 'Execute' USING BY VALUE RIF
                          BY VALUE INRECORD
                          BY VALUE OUTRECORD
                     RETURNING RESULT.
*    出力用インデクスドレコードからデータを取り出します
    INVOKE OUTRECORD 'get_Item' USING BY VALUE OUTLEN-INDEX
                           RETURNING OBJECT-OBJ.
    INVOKE CONVERT 'ToInt32' USING BY VALUE OBJECT-OBJ
                           RETURNING TMP-LEN.
    MOVE TMP-LEN TO OUTDATA-LEN.
    CALL 'CBLBYTEARRAYTOX' USING OUTDATA-ARRAY OUTDATA-LEN
                            OUTDATA.
    SET RECVMSG TO
       FUNCTION ALPHANUMERIC-TO-STRING(OUTDATA).
 METHOD-END.
*    TP1Connection.Dispose()を発行して，コネクションをコネクション
*    プールに戻します
    IF NOT TCX = NULL THEN
       INVOKE TCX 'Dispose'
    END-IF.
 PROG-END.
    EXIT METHOD.
 END METHOD SERVICE1.
*
 END OBJECT.
 END CLASS MyWebService1.
*

3.4.3　インデクスドレコードとバッファプーリング機能を使用する場合のメソッド発行手順

インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のメソッド発行手順を次に示します。

TP1ConnectionManagerクラスのインスタンスを生成または取り出します。
プロパティを特定のプロファイルから読み込む場合は，コンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。

TP1ConnectionManagerクラスのGetConnectionメソッドでTP1Connectionオブジェクトを取得します。
コネクションプールに使用できるコネクションがあった場合は，この時点でコネクションプールからコネクションを取り出した状態になります。

RpcInfoクラスのインスタンスを生成します。

RpcInfoオブジェクトにサービス名，サービスグループ名，タイムアウト値，RPC形態フラグなどを設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して，入力用インデクスドレコードを生成します。

TP1ConnectionManagerクラスのGetMessageBufferメソッドに入力データサイズを指定して発行して，入力データ用のMessageBuffer実装オブジェクトを取得します。
バッファプールに使用できるバッファがあった場合は，この時点でバッファプールからバッファを取り出した状態になります。

MessageBuffer実装オブジェクトが保持しているバッファに入力データを設定します。

入力用インデクスドレコードに入力データを設定したバッファを設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して，出力用インデクスドレコードを生成します。

TP1ConnectionManagerクラスのGetMessageBufferメソッドに出力データサイズを指定して発行し，出力データ用のMessageBuffer実装オブジェクトを取得して，出力用インデクスドレコードに設定します。
バッファプールに使用可能なバッファがあった場合は，この時点でバッファプールからバッファを取り出した状態になります。

TP1ConnectionクラスのExecuteメソッドを発行してRPC要求を行います（何度でも発行できます）。
再度RPC要求を行う場合は，4.～11.のどれかから行います。
各オブジェクトは複数回のRPC要求で再利用できます。

出力用IndexedRecordからデータを取り出します。

入力用MessageBuffer実装オブジェクトのReleaseMessageBufferメソッドを発行して，入力用メッセージバッファをバッファプールに戻します。

出力用MessageBuffer実装オブジェクトのReleaseMessageBufferメソッドを発行して，出力用メッセージバッファをバッファプールに戻します。

TP1ConnectionクラスのDisposeメソッドを発行して，コネクションをコネクションプールに戻します。
複数のTP1Connectionオブジェクトを使う場合は，それぞれのインスタンスが不要になった時点でDisposeメソッドを発行します。

注意

ASP.NET Webアプリケーションで使用する場合，MessageBufferクラスのReleaseMessageBufferメソッド，およびTP1ConnectionクラスのDisposeメソッドを，次の時点で必ず発行してください。

各UIイベントハンドラの終了時

Webサービスメソッドの終了時

これらのメソッドを適切に発行しないと，メモリリークの原因となります。

また，TP1ConnectionManagerクラスは，ASP.NETではアプリケーション状態，またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成や削除を繰り返した場合，性能劣化やメモリ使用効率低下の原因となります。

3.4.4　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例

インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合の，ASP.NET Webアプリケーションでの使用例を次に示します。

なお，コメント中の(1)，(2)などは「3.4.3　インデクスドレコードとバッファプーリング機能を使用する場合のメソッド発行手順」の説明の番号に対応しています。

＜この項の構成＞

(1)　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例（C#の場合）

(2)　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例（COBOL言語の場合）

(1)　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例（C#の場合）

using System;
using System.Text;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Connector;
using MyCompany;

namespace MyCompany
{
 public class MyForm1 : System.Web.UI.Page
 {
   …
   private void Button1_Click(object sender, System.EventArgs e)
   {
     TP1Connection tc = null;
     MessageBuffer inBuf = null;
     MessageBuffer outBuf = null;
     // このボタンがクリックされたら
     // OpenTP1<ServerA>のサービス要求を行う
     // グローバル変数のアプリケーション状態から
     // TP1ConnectionManagerを取得する
     // (1) TP1ConnectionManagerクラスの生成
     TP1ConnectionManager tcm =
        (TP1ConnectionManager)this.Application["tcmServerA"];
     // (2) TP1Connectionオブジェクトの取得
     tc = tcm.GetConnection();
     try {
       Encoding enc = Encoding.Default;
       // (3) RpcInfoクラスの生成
       RpcInfo ixSpec = new RpcInfo();
       // (4) サービスグループ名
       ixSpec.ServiceGroupName = "SVGRP1";
       // (4) サービス名
       ixSpec.ServiceName = "SERV1";
       // (4) RPC呼び出し形態
       ixSpec.Flags = RpcInfo.DCNOFLAGS;
       // (4) 最大応答待ち時間
       ixSpec.WatchTime = 180;
       // (5) 入力用インデクスドレコードの生成
       IndexedRecord input =
                     tcm.CreateIndexedRecord("in_record");
       // (6)(7) 入力データ用メッセージバッファの取得，
       // および入力データの設定
       string indata = "Say Hello to OpenTP1!";
       // (6) 入力データ用メッセージバッファの取得
       int indataLen = enc.GetByteCount(indata);
       // (6) 入力データ用メッセージバッファの取得
       inBuf = tcm.GetMessageBuffer(indataLen);
       // (7) 入力データの設定
       inBuf.Append(enc.GetBytes(indata));
       // (8) 入力用インデクスドレコードの設定
       input.Add(inBuf);
       // (9) 出力用インデクスドレコードの生成
       IndexedRecord output =
                     tcm.CreateIndexedRecord("out_record");
       // (10) 出力データ用メッセージバッファの取得
       // および出力用インデクスドレコードの設定
       outBuf = tcm.GetMessageBuffer(this.textBox1.MaxLength*2);
       output.Add(outBuf);
       // (11) RPCの実行
       bool ret = tc.Execute(ixSpec, input, output);
       // (12) データの取り出し
       outBuf = (MessageBuffer)output[0];
       // (12) データの取り出し
       byte[] outdata = outBuf.Buffer;
       // (12) データの取り出し
       this.textBox1.Text = enc.GetString(outdata);
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // Connector .NET（OpenTP1共通クラス）が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (13) 入力用メッセージバッファをバッファプールに戻す
       if (inBuf != null) inBuf.ReleaseMessageBuffer();
       // (14) 出力用メッセージバッファをバッファプールに戻す
       if (outBuf != null) outBuf.ReleaseMessageBuffer();
       // (15) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
      }
   }
 }
}

(2)　インデクスドレコードとバッファプーリング機能を使用してRPC要求をする場合のコーディング例（COBOL言語の場合）

>>PROPAGATE OFF
>>WEBSERVICE
>>WEBSERVICE-NAME 'MyWebService1'
>>WEBSERVICE-DESCRIPTION 'Sample of OpenTP1'
>>WEBSERVICE-NAMESPACE 'http://tempuri.org/'
>>END-WEBSERVICE
IDENTIFICATION DIVISION.
CLASS-ID. MyWebService1 AS 'MyCompany.MyWebService1'
 IS PUBLIC INHERITS WEBSERVICE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS WEBSERVICE AS 'System.Web.Services.WebService'.
 CLASS SYSTEMEXCEPTION AS 'System.Exception'.
 CLASS TP1EXCEPTION AS
    'Hitachi.OpenTP1.TP1Exception'.
 CLASS TP1CONNECTIONMANAGER AS
    'Hitachi.OpenTP1.Connector.TP1ConnectionManager'.
 CLASS TP1CONNECTION AS
    'Hitachi.OpenTP1.Connector.TP1Connection'.
 CLASS INDEXEDRECORD AS
    'Hitachi.OpenTP1.Connector.IndexedRecord'.
 CLASS RPCINFO AS 'Hitachi.OpenTP1.Connector.RpcInfo'.
 CLASS MESSAGEBUFFER AS
    'Hitachi.OpenTP1.Connector.MessageBuffer'.
 CLASS BYTE-ARRAY  AS 'System.Byte' IS ARRAY.
 CLASS OBJECT-CLS  AS 'System.Object'.
 CLASS CONVERT     AS 'System.Convert'.
 PROPERTY SERVICEGROUPNAME AS 'ServiceGroupName'.
 PROPERTY SERVICENAME      AS 'ServiceName'.
 PROPERTY FLAGS            AS 'Flags'.
 PROPERTY WATCHTIME        AS 'WatchTime'.
 PROPERTY BUFFER           AS 'Buffer'.
 PROPERTY MESSAGELENGTH    AS 'MessageLength'.
IDENTIFICATION DIVISION.
OBJECT.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  SERVICE-GROUP        PIC X(6) VALUE 'SVGRP1'.
01  SERVICE-NAME         PIC X(5) VALUE 'SERV1'.
PROCEDURE DIVISION.
>>WEBMETHOD
>>WEBMETHOD-DESCRIPTION 'SERVICE1'
>>WEBMETHOD-ENABLESESSION FALSE
>>WEBMETHOD-CACHEDURATION 0
>>WEBMETHOD-BUFFERRESPONSE TRUE
>>END-WEBMETHOD
IDENTIFICATION DIVISION.
METHOD-ID. SERVICE1 IS PUBLIC.
ENVIRONMENT DIVISION.
DATA DIVISION.
LOCAL-STORAGE SECTION.
01  IN-REC           PIC X(20) VALUE SPACE.
01  IN-REC-LEN       PIC S9(9) COMP-5 VALUE 20.
01  OUTDATA          PIC X(20) VALUE SPACE.
01  OUT-REC-LEN      PIC S9(9) COMP-5 VALUE 20.
01  OUTDATA-LEN      PIC S9(9) COMP-5.
01  TCNMGR    USAGE OBJECT REFERENCE TP1CONNECTIONMANAGER.
01  TCX       USAGE OBJECT REFERENCE TP1CONNECTION.
01  INRECORD  USAGE OBJECT REFERENCE INDEXEDRECORD.
01  OUTRECORD USAGE OBJECT REFERENCE INDEXEDRECORD.
01  RIF       USAGE OBJECT REFERENCE RPCINFO.
01  INBUF     USAGE OBJECT REFERENCE MESSAGEBUFFER.
01  OUTBUF    USAGE OBJECT REFERENCE MESSAGEBUFFER.
01  OBJECT-OBJ OBJECT REFERENCE OBJECT-CLS.
01  SERVICE-GROUP-STR    USAGE STRING.
01  SERVICE-NAME-STR     USAGE STRING.
01  IN-RECORD-NAME-STR   USAGE STRING.
01  OUT-RECORD-NAME-STR  USAGE STRING.
01  IN-RECORD-NAME       PIC X(10) VALUE 'in_record'.
01  OUT-RECORD-NAME      PIC X(10) VALUE 'out_record'.
01  INDATA-ARRAY   OBJECT REFERENCE BYTE-ARRAY.
01  OUTDATA-ARRAY  OBJECT REFERENCE BYTE-ARRAY.
01  RPC-FLAGS      USAGE BINARY-LONG VALUE 0.
01  WATCH-TIME     USAGE BINARY-LONG VALUE -1.
01  RST-INDEX      USAGE BINARY-LONG VALUE 0.
01  RESULT         USAGE LOGICAL.
01  OUTBUF-INDEX   USAGE BINARY-LONG VALUE 0.
LINKAGE SECTION.
01  SENDMSG  USAGE STRING.
01  RECVMSG  USAGE STRING.
PROCEDURE DIVISION USING BY VALUE SENDMSG RETURNING RECVMSG.
DECLARATIVES.
TP1-EXCEPTION SECTION.
  USE AFTER EO TP1EXCEPTION.
*  Connector .NET（OpenTP1共通クラス）が検知したエラー
  RESUME METHOD-END.
ERROR-HANDLER1 SECTION.
  USE AFTER EO SYSTEMEXCEPTION.
*  予期しない例外
  RESUME METHOD-END.
END DECLARATIVES.
MAIN-PROC.
*    TP1ConnectionManagerのインスタンスを生成
    INVOKE TP1CONNECTIONMANAGER 'New' RETURNING TCNMGR.
*    TP1ConnectionManager.GetConnection()でTP1Connectionを取得します
    INVOKE TCNMGR 'GetConnection' RETURNING TCX.
*    RpcInfoのインスタンスを生成します
    INVOKE RPCINFO 'New' RETURNING RIF.
*    RpcInfoオブジェクトにサービスグループ名を設定します
    SET SERVICE-GROUP-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(SERVICE-GROUP).
    SET SERVICEGROUPNAME OF RIF TO SERVICE-GROUP-STR.
*    RpcInfoオブジェクトにサービス名を設定します
    SET SERVICE-NAME-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(SERVICE-NAME).
    SET SERVICENAME OF RIF TO SERVICE-NAME-STR.
*    RpcInfoオブジェクトにRPC呼び出し形態を設定します
    MOVE RPC-FLAGS TO FLAGS OF RIF.
*    RpcInfoオブジェクトに最大応答待ち時間を設定します
    MOVE WATCH-TIME TO WATCHTIME OF RIF.
*    TP1ConnectionManager.CreateIndexedRecord()を発行して
*    入力用インデクスドレコードを生成します
    SET IN-RECORD-NAME-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(IN-RECORD-NAME).
    INVOKE TCNMGR 'CreateIndexedRecord'
       USING BY VALUE IN-RECORD-NAME-STR
       RETURNING INRECORD.
*    TP1ConnectionManager.GetMessageBuffer（入力データサイズ）を
*    発行して入力データ用のMessageBuffer実装オブジェクトを取得します
    INVOKE TCNMGR 'GetMessageBuffer'
       USING BY VALUE IN-REC-LEN
       RETURNING INBUF.
    INVOKE BYTE-ARRAY 'New' USING BY VALUE IN-REC-LEN
                        RETURNING INDATA-ARRAY.
    MOVE FUNCTION STRING-TO-ALPHANUMERIC(SENDMSG)
     TO IN-REC.
    CALL 'CBLXTOBYTEARRAY' USING IN-REC INDATA-ARRAY
                            IN-REC-LEN.
*    MessageBuffer実装オブジェクトが保持しているバッファに
*    入力データを設定します
    INVOKE INBUF 'Append' USING BY VALUE INDATA-ARRAY.
*    入力用インデクスドレコードに入力データを設定したバッファを設定します
    INVOKE INRECORD 'Add' USING BY VALUE INBUF
                      RETURNING RST-INDEX.
*    TP1ConnectionManager.CreateIndexedRecord（）を発行して
*    出力用インデクスドレコードを生成します
    SET OUT-RECORD-NAME-STR TO
       FUNCTION ALPHANUMERIC-TO-STRING(OUT-RECORD-NAME).
    INVOKE TCNMGR 'CreateIndexedRecord'
       USING BY VALUE OUT-RECORD-NAME-STR
       RETURNING OUTRECORD.
*    TP1ConnectionManager.GetMessageBuffer（出力データサイズ）を
*    発行して出力データ用のMessageBuffer実装オブジェクトを取得し，
*    出力用インデクスドレコードに設定します
    INVOKE TCNMGR 'GetMessageBuffer'
        USING BY VALUE OUT-REC-LEN
        RETURNING OUTBUF.
    INVOKE OUTRECORD 'Add' USING BY VALUE OUTBUF
        RETURNING RST-INDEX.
*    TP1Connection.Execute()を発行してRPC要求を行います
    INVOKE TCX 'Execute' USING BY VALUE RIF
                          BY VALUE INRECORD
                          BY VALUE OUTRECORD
                     RETURNING RESULT.
*    出力用インデクスドレコードからデータを取り出します
    INVOKE OUTRECORD 'get_Item' USING BY VALUE OUTBUF-INDEX
                           RETURNING OBJECT-OBJ.
    SET OUTBUF TO OBJECT-OBJ AS MESSAGEBUFFER.
    SET OUTDATA-ARRAY TO BUFFER OF OUTBUF.
    MOVE MESSAGELENGTH OF OUTBUF TO OUTDATA-LEN.
    CALL 'CBLBYTEARRAYTOX' USING OUTDATA-ARRAY OUTDATA-LEN
                            OUTDATA.
    SET RECVMSG TO FUNCTION ALPHANUMERIC-TO-STRING(OUTDATA).
METHOD-END.
*    入力用MessageBuffer実装オブジェクトのReleaseMessageBuffer()を
*    発行して入力用メッセージバッファをバッファプールに戻します
    IF NOT INBUF = NULL THEN
       INVOKE INBUF 'ReleaseMessageBuffer'
    END-IF.
*    出力用MessageBuffer実装オブジェクトのReleaseMessageBuffer()を
*    発行して出力用MessageBufferをバッファプールに戻します
    IF NOT OUTBUF = NULL THEN
       INVOKE OUTBUF 'ReleaseMessageBuffer'
    END-IF.
*    TP1Connection.Dispose()を発行して，コネクションをコネクション
*    プールに戻します
    IF NOT TCX = NULL THEN
       INVOKE TCX 'Dispose'
    END-IF.
 PROG-END.
    EXIT METHOD.
END METHOD SERVICE1.
*
END OBJECT.
END CLASS MyWebService1.
*

3.5　トランザクション制御機能の使用方法

OpenTP1のトランザクション制御機能を使用する場合は，TP1Connectionオブジェクトを使用します。RPCインタフェースに次のどのインタフェースを使用した場合でも使用できます。

.NETインタフェース定義を使用した場合

サービス定義を使用した場合

インデクスドレコードを使用した場合

次の条件でトランザクション制御機能を使用した場合のコーディング例を示します。

サービスグループ名：GRP1

インタフェース名：MyCompany.IGyoumuB

呼び出すサービスメソッド名（サービス名）：
PutData (DCRPC_CHAINED)
Invoke (DCNOFLAGS)

構成ファイル：指定あり（プロファイルID="TP1Host1"）

クライアントスタブ：.NETインタフェース定義から生成

アプリケーション形態：ASP.NET XML Webサービス

RPC形態：連鎖RPC

＜この節の構成＞

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

(2)　連鎖RPCでトランザクション機能を使用する場合のコーディング例（ASP.NET XML Webサービス，C#の場合）

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

using System;

namespace MyCompany
{
 public interface IGyoumuB
 {
   void PutData(string clientId, string[] key, string[] data);
   int Invoke(string clientId, ref string result);
 }
}

(2)　連鎖RPCでトランザクション機能を使用する場合のコーディング例（ASP.NET XML Webサービス，C#の場合）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Connector;
using MyCompany;

namespace MyCompany
{
 [WebService]
 public class MyWebService1
 {
   …
   [WebMethod]
   private string Service(string[] key, string[] data)
   {
     string clientId = "MyWS_Service_" + seqNo.ToString();
     string result = "";
     TP1Connection tc = null;
     bool trnFlag = false;
     try {
     // グローバル変数のアプリケーション状態から
     // TP1ConnectionManagerを取得  
       TP1ConnectionManager tcm =
         (TP1ConnectionManager)this.Application["tcmTP1Host1"];
       tc = tcm.GetConnection();
       IGyoumuBStub server = new IGyoumuBStub(tc, "GRP1");
       // トランザクション開始
       tc.Begin();
       trnFlag = true;
       // 連鎖RPC
       server.Flags = RpcInfo.DCRPC_CHAINED;
       // 最大応答待ち時間(60秒)
       server.WatchTime = 60;
       // PutDataの呼び出し(サーバにデータの書き込み)
       server.PutData(clientId, key, data);
       // 連鎖RPCの終了
       server.Flags = RpcInfo.DCNOFLAGS;
       // 最大応答待ち時間(180秒)
       server.WatchTime = 180;
       // Invokeの呼び出し(処理要求)
       server.Invoke(clientId, ref result);
       // トランザクション終了
       tc.Commit();
       trnFlag = false;
       return result;
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // その他スタブなどが検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       try {
         // ロールバック
         if (trnFlag) tc.Rollback();
       }
       catch (Exception) {
         // 無視
       }
       // コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
 }
}

3.6　TCP/IP通信機能の使用方法

Connector .NETのアプリケーションからTCP/IP通信機能を使用する方法について説明します。

＜この節の構成＞

3.6.1　TCP/IP通信機能を使用する場合のメソッド発行手順

3.6.2　TCP/IP通信機能を使用する場合のコーディング例（C#の場合）

3.6.3　TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順

3.6.4　TCP/IP通信機能とバッファプーリング機能を使用する場合のコーディング例（C#の場合）

3.6.1　TCP/IP通信機能を使用する場合のメソッド発行手順

TCP/IP通信機能を使用して，OpenTP1のMHPや他システムと通信する場合のメソッド発行手順を次に示します。なお，TCP/IP通信にはインデクスドレコードを使用します。

TP1ConnectionManagerクラスのインスタンスを生成または取り出します。
構成定義を特定のプロファイルから読み込む場合は，コンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。TCP/IP通信とRPCとを併用する場合は，RPCで使用するプロファイルIDとは異なるプロファイルIDで構成定義を設定することを推奨します。

TP1ConnectionManagerクラスのGetTcpipConnectionメソッドでTcpipConnectionオブジェクトを取得します。
コネクションプールに使用できるコネクションがあった場合は，この時点でコネクションプールからコネクションを取り出した状態になります。

TcpipInfoクラスのインスタンスを生成します。

TcpipInfoオブジェクトにタイムアウト値，通信形態を設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して入力用インデクスドレコードを生成します。

入力用インデクスドレコードに入力データを設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して出力用インデクスドレコードを生成します。

出力データ用領域を確保して，出力用インデクスドレコードに設定します。

TcpipConnectionクラスのExecuteメソッドを発行してTCP/IP通信をします（何度でも発行できます）。
再度TCP/IP通信をする場合は，4.～9.のどれかから行います。
各オブジェクトは複数回のTCP/IP通信で再利用できます。

出力用インデクスドレコードからデータを取り出します。

TcpipConnectionクラスのDisposeメソッドを発行して，コネクションをコネクションプールに戻します。

注意

ASP.NET Webアプリケーションで使用する場合，TcpipConnectionクラスのDisposeメソッドは，次の時点で必ず発行してください。

各UIイベントハンドラの終了時

Webサービスメソッドの終了時

Disposeメソッドを適切に発行しないと，メモリリークの原因となります。

また，TP1ConnectionManagerクラスはASP.NETではアプリケーション状態，またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成と削除を繰り返した場合，性能劣化やメモリ使用効率低下の原因となります。

3.6.2　TCP/IP通信機能を使用する場合のコーディング例（C#の場合）

TCP/IP通信機能を使用する場合の，ASP.NET Webアプリケーションでの使用例を次に示します。

コメント中の(1)，(2)などは「3.6.1　TCP/IP通信機能を使用する場合のメソッド発行手順」の説明の番号に対応しています。

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Connector;
using MyCompany;

namespace MyCompany
{
 public class MyForm1 : System.Web.UI.Page
 {
   …
   private void Button1_Click(object sender, System.EventArgs e)
   {
     // このボタンがクリックされたら
     //  OpenTP1<ServerA>のサービス要求を行う
     // グローバル変数のアプリケーション状態から
     //  TP1ConnectionManagerを取得する
     // (1) TP1ConnectionManagerクラスの生成
     TP1ConnectionManager tcm =
        (TP1ConnectionManager)this.Application["tcmServerA"];
     // (2) TcpipConnectionオブジェクトの取得
     tc = tcm.GetTcpipConnection();
     try {
       Encoding enc = Encoding.Default;
       // (3) TcpipInfoクラスの生成
       TcpipInfo info = new TcpipInfo();
       // (4) 通信形態
       info.Flags = TcpipInfo.TCPIP_SENDRECV;
       // (4) 最大応答待ち時間
       info.WatchTime = 180;
       // (5) 入力用インデクスドレコードの生成
       IndexedRecord input =
                     tcm.CreateIndexedRecord("in_record");
       // (6) 入力データの設定
       string indata = "Say Hello to OpenTP1!";
       // (6) 入力データの設定
       input.Add(enc.GetBytes(indata));
       // (7) 出力用インデクスドレコードの生成
       IndexedRecord output =
                     tcm.CreateIndexedRecord("out_record");
       // (8) 出力データ用領域の設定
       output.Add(new byte[this.textBox1.MaxLength*2]);
       // (9) TCP/IP通信の実行
       bool ret = tc.Execute(info, input, output);
       // (10) データの取り出し
       byte[] outBuf = (byte[])output[0];
       // (10) データの取り出し
       this.textBox1.Text = enc.GetString(outBuf);
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // Connector .NET(OpenTP1共通クラス)が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (11) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
     }
   }
 }
}

3.6.3　TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順

TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順を次に示します。

TP1ConnectionManagerクラスのインスタンスを生成または取り出します。
構成定義を特定のプロファイルから読み込む場合は，コンストラクタの引数にプロファイルIDを指定します。インスタンスの生成はアプリケーションごとに行うことを推奨します。TCP/IP通信とRPCとを併用する場合は，RPCで使用するプロファイルIDとは異なるプロファイルIDで構成定義を設定することを推奨します。

TP1ConnectionManagerクラスのGetTcpipConnectionメソッドでTcpipConnectionオブジェクトを取得します。
コネクションプールに使用できるコネクションがあった場合は，この時点でコネクションプールからコネクションを取り出した状態になります。

TcpipInfoクラスのインスタンスを生成します。

TcpipInfoオブジェクトにタイムアウト値，通信形態を設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して入力用インデクスドレコードを生成します。

TP1ConnectionManagerクラスのGetMessageBufferメソッドに入力データサイズを指定して発行して，入力データ用のMessageBuffer実装オブジェクトを取得します。
バッファプールに使用できるバッファがあった場合は，この時点でバッファプールからバッファを取り出した状態になります。

MessageBuffer実装オブジェクトが保持しているバッファに入力データを設定します。

入力用インデクスドレコードに入力データを設定したバッファを設定します。

TP1ConnectionManagerクラスのCreateIndexedRecordメソッドを発行して，出力用インデクスドレコードを生成します。

TP1ConnectionManagerクラスのGetMessageBufferメソッドに出力データサイズを指定して発行し，出力データ用のMessageBuffer実装オブジェクトを取得して，出力用インデクスドレコードに設定します。
バッファプールに使用可能なバッファがあった場合は，この時点でバッファプールからバッファを取り出した状態になります。また，TCP/IP通信では，出力データ用のMessageBuffer実装オブジェクトのMessageLengthにあらかじめ受信データサイズを設定しておきます。

TcpipConnectionクラスのExecuteメソッドを発行してTCP/IP通信を行います（何度でも発行できます）。
再度TCP/IP通信を行う場合は，4.～11.のどれかから行います。
各オブジェクトは複数回のTCP/IP通信で再利用できます。

出力用インデクスドレコードからデータを取り出します。

入力用MessageBuffer実装オブジェクトのReleaseMessageBufferメソッドを発行して，入力用メッセージバッファをバッファプールに戻します。

出力用MessageBuffer実装オブジェクトのReleaseMessageBufferメソッドを発行して，出力用メッセージバッファをバッファプールに戻します。

TcpipConnectionクラスのDisposeメソッドを発行して，コネクションをコネクションプールに戻します。
複数のTcpipConnectionオブジェクトを使う場合は，それぞれのインスタンスが不要になった時点でDisposeメソッドを発行します。

注1

ASP.NET Webアプリケーションで使用する場合，MessageBufferクラスのReleaseMessageBufferメソッド，およびTcpipConnectionクラスのDisposeメソッドを，次の時点で必ず発行してください。

各UIイベントハンドラの終了時

Webサービスメソッドの終了時

これらのメソッドを適切に発行しないと，メモリリークの原因となります。

また，TP1ConnectionManagerクラスは，ASP.NETではアプリケーション状態，またはアプリケーションインスタンスに保持することを推奨します。各UIイベントハンドラやWebサービスメソッドごとに生成や削除を繰り返した場合，性能劣化やメモリ使用効率低下の原因となります。

注2

出力データ用のMessageBuffer実装オブジェクトのMessageLengthプロパティにあらかじめ受信データサイズ設定しなかった場合は，バッファ長が受信データサイズと見なされます。バッファ長が実際の受信データサイズと異なる場合は，受信データにずれが生じたり，受信タイムアウトが発生したりすることがあります。

3.6.4　TCP/IP通信機能とバッファプーリング機能を使用する場合のコーディング例（C#の場合）

TCP/IP通信機能とバッファプーリング機能を使用する場合の，ASP.NET Webアプリケーションでの使用例を次に示します。

コメント中の(1)，(2)などは「3.6.3　TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順」の説明の番号に対応しています。

using System;
using System.Text;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Connector;
using MyCompany;

namespace MyCompany
{
 public class MyForm1 : System.Web.UI.Page
 {
   …
   private void Button1_Click(object sender, System.EventArgs e)
   {
     TP1Connection tc = null;
     MessageBuffer inBuf = null;
     MessageBuffer outBuf = null;
     // このボタンがクリックされたら
     // OpenTP1<ServerA>のサービス要求を行う
     // グローバル変数のアプリケーション状態から
     // TP1ConnectionManagerを取得する
     // (1) TP1ConnectionManagerクラスの生成
     TP1ConnectionManager tcm =
        (TP1ConnectionManager)this.Application["tcmServerA"];
     // (2) TcpipConnectionオブジェクトの取得
     tc = tcm.GetTcpipConnection();
     try {
       Encoding enc = Encoding.Default;
       // (3) TcpipInfoクラスの生成
       TcpipInfo info = new TcpipInfo();
       // (4) 通信形態
       info.Flags = TcpipInfo.TCPIP_SENDRECV;
       // (4) 最大応答待ち時間
       info.WatchTime = 180;
       // (5) 入力用インデクスドレコードの生成
       IndexedRecord input =
                     tcm.CreateIndexedRecord("in_record");
       // (6)(7) 入力データ用メッセージバッファの取得，
       // および入力データの設定
       string indata = "Say Hello to OpenTP1!";
       // (6) 入力データ用メッセージバッファの取得
       int indataLen = enc.GetByteCount(indata);
       // (6) 入力データ用メッセージバッファの取得
       inBuf = tcm.GetMessageBuffer(indataLen);
       // (7) 入力データの設定
       inBuf.Append(enc.GetBytes(indata));
       // (8) 入力用インデクスドレコードの設定
       input.Add(inBuf);
       // (9) 出力用インデクスドレコードの生成
       IndexedRecord output =
                     tcm.CreateIndexedRecord("out_record");
       // (10) 出力データ用メッセージバッファの取得
       // および出力用インデクスドレコードの設定
       outBuf = tcm.GetMessageBuffer(this.textBox1.MaxLength*2);
       outBuf.MessageLength = 32;
       output.Add(outBuf);
       // (11) TCP/IP通信の実行
       bool ret = tc.Execute(info, input, output);
       // (12) データの取り出し
       outBuf = (MessageBuffer)output[0];
       // (12) データの取り出し
       byte[] outdata = outBuf.Buffer;
       // (12) データの取り出し
       this.textBox1.Text = enc.GetString(outdata);
     } catch (TP1ConnectorException exp) {
       // Connector .NETが検知したエラー
     } catch (TP1Exception exp) {
       // Connector .NET（OpenTP1共通クラス）が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
     finally
     {
       // (13) 入力用メッセージバッファをバッファプールに戻す
       if (inBuf != null) inBuf.ReleaseMessageBuffer();
       // (14) 出力用メッセージバッファをバッファプールに戻す
       if (outBuf != null) outBuf.ReleaseMessageBuffer();
       // (15) コネクションをコネクションプールに戻す
       if (tc != null) tc.Dispose();
      }
   }
 }
}

3.7　UAP作成時の注意事項

＜この節の構成＞

3.7.1　アプリケーションプログラムの実行環境と留意点

3.7.2　例外の捕捉とエラーの判定

3.7.3　COBOL言語で作成する場合の注意事項

3.7.4　クラスライブラリを使用する場合の注意事項

3.7.1　アプリケーションプログラムの実行環境と留意点

Connector .NETは，Connector .NETのアプリケーションから利用するクラスライブラリをアセンブリ（DLL形式）として提供します。Connector .NETのアプリケーションは，その形態によってさまざまなランタイムホストで実行されます。

使用するランタイムホストごとに，アプリケーションドメインの構成，アセンブリの配置と検索方法，セキュリティポリシー，スレッド構成，およびアプリケーション構成ファイルの配置が異なりますので，アプリケーションプログラムを実行する前に，使用するランタイムホストの仕様を確認してください。

3.7.2　例外の捕捉とエラーの判定

Connector .NETのアプリケーションでは，Connector .NETが提供するクラスライブラリやスタブ，.NET Frameworkなどから例外が発生する場合があります。これらの例外は適切に捕捉してください。

Connector .NETからは，次の例外が発生する可能性があります。

表3-12　発生する可能性がある例外

名前空間
例外名
意味

Hitachi.OpenTP1
TP1Exception
共通の例外基底クラス

TP1RemoteException
サーバで発生した例外の受信

TP1UserException
ユーザが任意に使用

TP1MarshalException
スタブでのデータ変換エラー

Hitachi.OpenTP1.Connector
TP1ConnectorException
クラスライブラリでのエラー検知

TcnIllegalArgumentException
（TP1ConnectorExceptionのサブクラス）
メソッド呼び出し時の引数の不正

TcnIllegalStateException
（TP1ConnectorExceptionのサブクラス）
メソッド呼び出し時の状態の不正

TcnNotUsedException
（TP1ConnectorExceptionのサブクラス）
設定されていない機能の使用

＜この項の構成＞

(1)　TP1Exception

(2)　TP1RemoteException

(3)　TP1UserException

(4)　TP1MarshalException

(5)　TP1ConnectorException

(6)　TcnIllegalArgumentException

(7)　TcnIllegalStateException

(8)　TcnNotUsedException

(1)　TP1Exception

OpenTP1のすべての例外の基底クラスです。個別の例外を捕捉しないで，まとめて捕捉したい場合などにこのTP1ExceptionクラスですべてのOpenTP1の例外を捕捉できます。

(2)　TP1RemoteException

クライアントスタブを使用してRPC要求をした場合に，サーバ側で例外が発生したことを示す例外です。呼び出し元のクライアント側で発生した例外とサーバ側で発生した例外を区別できます。

(3)　TP1UserException

クライアント，およびサーバを.NETインタフェース定義を使用したOpenTP1 for .NET FrameworkのUAPで作成した場合に，RPC要求されたサービスメソッドからクライアントにこの例外を返すことができます。

この例外はUAPで任意に使用できます。クライアント側でもTP1RemoteExceptionには変換されません。

なお，.NETインタフェース定義を使用しない場合は，この例外を使用しないでください。使用した場合，クライアント側にRPC要求のエラーが通知されます。

(4)　TP1MarshalException

クライアントスタブを使用してRPC要求をした場合に，データ変換エラーが発生したことを示す例外です。クライアントとサーバでインタフェースの定義が一致していない場合や，サービス定義（データ型定義）に誤りがあった場合などに発生します。

(5)　TP1ConnectorException

Connector .NETが提供するクラスライブラリの各クラスおよびメソッドでエラーを検知した場合に発生する例外です。この例外がそのまま発生することもありますが，この例外のサブクラスとして発生する例外もあります。

(6)　TcnIllegalArgumentException

メソッド呼び出し時の引数が不正な場合に発生します。

(7)　TcnIllegalStateException

不正な状態でメソッドを呼び出した場合に発生します。

(8)　TcnNotUsedException

設定されていない機能を使用しようとした場合に発生します。

3.7.3　COBOL言語で作成する場合の注意事項

COBOL言語でUAPを作成する場合，次の点に注意してください。

.NETインタフェース定義およびサービス定義は使用できません。

リポジトリ段落で，Connector .NETが提供するクラスを参照するように指定してください。

PUBLICクラスとして宣言してください。

AS指定のないクラス名の場合，名前空間は「COBOL2002.DefaultNamespace」が仮定されます。AS指定があるクラス名の場合，名前空間は仮定されません。

COBOL言語のそのほかの注意事項については，マニュアル「COBOL2002 for .NET Framework ユーザーズガイド」を参照してください。

3.7.4　クラスライブラリを使用する場合の注意事項

クラスライブラリを使用する場合，次の点に注意してください。

Hitachi.OpenTP1で始まる名前空間はOpenTP1が使用するため，OpenTP1以外のアプリケーションでは使用できません。

Connector .NETが提供するクラスライブラリはSPP.NET，SUP.NET上では使用しないでください。これらのUAP上では，Extension .NETが提供するクラスライブラリを使用してください。

3.8　サンプルプログラムの使用方法

Connector .NETのサンプルプログラムのディレクトリ構成，ビルド方法および実行手順を説明します。なお，以降の説明で，%DCCNNDIR%はConnector .NETのインストールディレクトリを示します。

＜この節の構成＞

3.8.1　ディレクトリ構成

3.8.2　サンプルプログラムのビルド方法

3.8.3　サンプルプログラムの実行手順

3.8.1　ディレクトリ構成

Connector .NETのサンプルプログラムは，次の表に示すディレクトリに格納されています。

表3-13　サンプルプログラムのディレクトリ構成

ディレクトリ
説明

%DCCNNDIR%¥examples
Connector .NETのサンプルプログラム格納ディレクトリ

%DCCNNDIR%¥examples¥C#
C#のサンプルプログラム格納ディレクトリ

%DCCNNDIR%¥examples¥J#
J#のサンプルプログラム格納ディレクトリ

%DCCNNDIR%¥examples¥VB.NET
Visual Basicのサンプルプログラム格納ディレクトリ

%DCCNNDIR%¥examples¥COBOL.NET
COBOL言語のサンプルプログラム格納ディレクトリ

%DCCNNDIR%¥examples¥WSClient
ASP.NET XML Webサービスのサンプルプログラムアクセス用のクライアント（C#）
（C#，J#およびVisual Basicのサンプルプログラム用）

%DCCNNDIR%¥examples¥WSCltCB
ASP.NET XML Webサービスのサンプルプログラムアクセス用のクライアント（COBOL.NET）
（COBOL言語のサンプルプログラム用）

%DCCNNDIR%¥examples¥WCF
WCF連携機能のサンプルプログラム格納ディレクトリ
（C#およびVisual Basicでだけ提供）

各言語のサンプルプログラム格納ディレクトリ下は，次の表に示す名称のディレクトリで構成されます。それぞれのディレクトリの名称と，格納されているサンプルプログラムの種類について，開発言語別に次の表に示します。

表3-14　サンプルプログラムの種類（C#，J#，およびVisual Basicの場合）

名称※
説明

xxWABIN
RPC要求インタフェースとしてバイナリデータを使用したASP.NET Webアプリケーションです。
このサンプルプログラムでは，クライアントスタブを使用しません。

xxWSCR
RPC要求インタフェースとしてサービス定義から生成されたTP1 Service Proxyとカスタムレコードを使用したASP.NET XML Webサービスです。

xxWAIF
RPC要求インタフェースとして.NETインタフェース定義から生成されたクライアントスタブを使用したASP.NET Webアプリケーションです。

xxWAXML
RPC要求インタフェースとして.NETインタフェース定義から生成されたクライアントスタブを使用し，かつRPCデータのXMLマッピング機能を使用したASP.NET Webアプリケーションです。

xxWAWCF
WCF連携機能を使用してOpenTP1にサービスを要求するWindowsアプリケーションです（C#およびVisual Basicでだけ提供しています）。

注※

名称の先頭のxxは，言語ごとに次の文字に置き換えてください。

C#：CS，J#：VJ，Visual Basic：VB

表3-15　サンプルプログラムの種類（COBOL言語の場合）

名称
説明

CBWSBIN
RPC要求インタフェースとしてバイナリデータを使用したASP.NET Webサービスです。
このサンプルプログラムでは，クライアントスタブを使用しません。

3.8.2　サンプルプログラムのビルド方法

Connector .NETのサンプルプログラムをビルドする手順を説明します。

＜この項の構成＞

(1)　サンプルプログラムをビルドするための準備

(2)　サンプルプログラムをまとめてビルドする方法

(3)　サンプルプログラムを個別にビルドする方法

(1)　サンプルプログラムをビルドするための準備

次のコマンドプロンプトを起動します。

C#，J#，およびVisual Basicの場合
Visual Studioが提供するコマンドプロンプト，または .NET Framework SDKが提供するコマンドプロンプト

COBOL言語の場合
COBOL2002 for .NET Frameworkが提供するコマンドプロンプト

次のOSでJ#のサンプルプログラムをビルドする場合は， .NET Framework v2.0の32ビット版のインストールディレクトリを環境変数PATHに設定します。

Windows Server 2003（64ビット用）

Windows Vista（64ビット用）

Windows Server 2008（64ビット用）

環境変数DCCLNDIRに，TP1/Client for .NET Frameworkインストールディレクトリを設定します。
【例】set DCCLNDIR=C:¥Program Files¥HITACHI¥TP1Client for .NET Framework

環境変数DCCNNDIRに，Connector .NETのインストールディレクトリを設定します。
【例】set DCCNNDIR=C:¥Program Files¥HITACHI¥TP1Connector for .NET Framework

WCF連携機能のサンプルプログラムをビルドする場合は，環境変数WCFDIRにWCFのライブラリが格納されているディレクトリを設定します。
【例】set WCFDIR=C:¥WINDOWS¥Microsoft.NET¥Framework¥v3.0¥Windows Communication Foundation

Windows Vista，およびWindows Server 2008 の環境の場合，ユーザアカウント制御（UAC）で保護されたディレクトリ下※ではサンプルプログラムのビルドに失敗します。このため，ユーザアカウント制御（UAC）で保護されたディレクトリ下でサンプルプログラムをビルドする場合は，［管理者として実行］で起動したコマンドプロンプト上でビルドしてください。

注※

Connector .NETのサンプルプログラム格納ディレクトリ（<OSのインストールディレクトリ>:¥Program Files¥HITACHI¥TP1Connector for .NET Framework）もユーザアカウント制御（UAC）で保護されたディレクトリに該当します。

(2)　サンプルプログラムをまとめてビルドする方法

サンプルプログラムはをまとめてビルドする方法は，どの開発言語のサンプルプログラムをビルドするかによって異なります。それぞれの場合に分けて方法を次に示します。

C#，J#，およびVisual Basicを使用した場合のサンプルプログラムをまとめてビルドする場合
%DCCNNDIR%¥examples¥build_all.batを実行します。

すべての開発言語のサンプルプログラムをまとめてビルドする場合
%DCCNNDIR%¥examples¥build_all2.batを実行します。
ただし，build_all.bat，およびbuild_all2.batを実行してもWCF連携機能のサンプルプログラムはビルドされません。

WCF連携機能のサンプルプログラムをビルドする場合
%DCCNNDIR%¥examples¥WCF¥build_wcf.batを実行します。

言語別にサンプルプログラムをまとめてビルドする場合

C#の場合
%DCCNNDIR%¥examples¥C#¥build_cs.batを実行します。

J#の場合
%DCCNNDIR%¥examples¥J#¥build_vjs.batを実行します。

Visual Basicの場合
%DCCNNDIR%¥examples¥VB.NET¥build_vb.batを実行します。

COBOL言語の場合
%DCCNNDIR%¥examples¥COBOL.NET¥build_cbl.batを実行します。

(3)　サンプルプログラムを個別にビルドする方法

各サンプルプログラム格納ディレクトリ下のbuild.batを実行します。

【例】%DCCNNDIR%¥examples¥VB.NET¥SPPIF¥build.bat

3.8.3　サンプルプログラムの実行手順

Connector .NETのサンプルプログラムの実行手順を説明します。

＜この項の構成＞

(1)　SPP.NETのサンプルプログラムの起動

(2)　構成ファイルの変更

(3)　IISでの公開

(4)　クライアントからのアクセス

(1)　SPP.NETのサンプルプログラムの起動

各サンプルプログラムを実行するためには，Extension .NETのサンプルプログラムのうち，各サンプルプログラムが利用するSPP.NETを起動します。各サンプルプログラムが利用するSPP.NETを次の表に示します。

SPP.NETの起動方法については，マニュアル「TP1/Extension for .NET Framework 使用の手引」を参照してください。

表3-16　サンプルプログラムが利用するSPP.NET

サンプルプログラムの種類 | 利用するSPP.NET | ユーザサーバ名
C#¥CSWABIN | C#¥SPPBIN | CSSPPBIN
C#¥CSWSCR | C#¥SPPBIN | CSSPPBIN
C#¥CSWAIF | C#¥SPPIF | CSSPPIF
C#¥CSWAXML | C#¥SPPIF | CSSPPIF
J#¥VJWABIN | J#¥SPPBIN | VJSPPBIN
J#¥VJWSCR | J#¥SPPBIN | VJSPPBIN
J#¥VJWAIF | J#¥SPPIF | VJSPPIF
J#¥VJWAXML | J#¥SPPIF | VJSPPIF
VB.NET¥VBWABIN | VB.NET¥SPPBIN | VBSPPBIN
VB.NET¥VBWSCR | VB.NET¥SPPBIN | VBSPPBIN
VB.NET¥VBWAIF | VB.NET¥SPPIF | VBSPPIF
VB.NET¥VBWAXML | VB.NET¥SPPIF | VBSPPIF
COBOL.NET¥CBWSBIN | COBOL.NET¥SPPOBJ | CBSPPOBJ
WCF¥CSWINWCF | C#¥SPPBIN | CSSPPBIN
WCF¥VBWINWCF | VB.NET¥SPPBIN | VBSPPBIN

(2)　構成ファイルの変更

利用するOpenTP1サーバ環境に応じて，構成ファイルのClient .NET構成定義を変更します。例えば，Visual BasicのWAIFサンプルで，OpenTP1のホスト名やネームサービスのポート番号などを変更する場合は，%DCCNNDIR%¥examples¥VB.NET¥VBWAIF¥web.configファイルのtp1Server要素，rpc要素およびnameService要素を変更します。

(3)　IISでの公開

ビルド済みのサンプルプログラムのディレクトリを指定して仮想ディレクトリを新規作成します。手順は次のとおりです。なお，WCF連携機能のサンプルプログラムではこの作業は不要です。

「コントロールパネル」の「管理ツール」から，「インターネット インフォメーション サービス」でIISの管理画面を表示します。

「ローカルコンピュータ」－「Webサイト」－「既定のWebサイト」を選択し，「新規作成」メニューの「仮想ディレクトリ」を選択します。

「エイリアス」にサンプルプログラム名称を，「ディレクトリ」にサンプルプログラムのディレクトリを指定します。

【例】Visual BasicのWAIFサンプルの場合

エイリアス：VBWAIF

ディレクトリ：%DCCNNDIR%¥examples¥VB.NET¥VBWAIF

「アクセス許可」画面でアクセス許可を指定します。

(4)　クライアントからのアクセス

クライアントを実行してアクセスします。

ASP.NET Webアプリケーションの場合

Webブラウザ（Microsoft Internet Explorer）を起動して，次のURLを入力してアクセスします。

http://<アドレス>/<仮想ディレクトリ名>/WebForm<サンプル名>.aspx

【例】Visual BasicのWAIFサンプルの場合

http://localhost/VBWAIF/WebFormVBWAIF.aspx

ASP.NET XML Webサービスの場合

サンプルプログラムをビルドして起動します。

C#，J#，およびVisual Basicの場合

WSClientサンプルプログラムを使用します。

【例】%DCCNNDIR%¥examples¥WSClient¥WSClient.exe

COBOL言語の場合

WSCltCBサンプルプログラムを使用します。

【例】%DCCNNDIR%¥examples¥WSCltCB¥WSCltCB.exe

次のURLを入力してアクセスします。

http://<アドレス>/<仮想ディレクトリ名>/CUSTOMSVWebService.asmx

【例】Visual Basic のWSCRサンプルの場合

http://localhost/VBWSCR/CUSTOMSVWebService.asmx

WCF連携機能のサンプルプログラムの場合

そのままWCF連携機能のサンプルプログラムを起動します。

【例】Visual BasicのWINWCFサンプルの場合

%DCCNNDIR%¥examples¥WCF¥VBWINWCF¥VBWinWCF.exe

4.　運用コマンド

この章では，Connector .NETで使用する運用コマンドについて説明します。

＜この章の構成＞

運用コマンドの種類

if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））

if2tsp（TSP生成コマンド（.NETインタフェース定義用））

spp2cstub（クライアントスタブ生成コマンド（サービス定義用））

spp2tsp（TSP生成コマンド（サービス定義用））

cnnnidgen（MSDTC連携機能で使用するノード識別子生成コマンド）

cnntrsls（トランザクションリカバリサービスの状態表示コマンド）

運用コマンドの種類

Connector .NETで使用できる運用コマンドを，次の表に示します。

表4-1　運用コマンドの種類（Connector .NET）

運用コマンド | 機能
if2cstub | C#，J#，またはVisual Basicで定義された.NETインタフェース定義を基に，クライアントスタブクラスのソースファイルを生成します。
if2tsp | C#，J#，またはVisual Basicで定義された.NETインタフェース定義を基に，TSP実装クラス，XML Webサービスクラス，asmxファイル，クライアントスタブ，および構成ファイルを生成します。
spp2cstub | 指定されたサービス定義ファイル，およびそのサービス定義ファイルが参照するデータ型定義ファイルを基に，クライアントスタブクラスおよびカスタムレコードクラスのソースファイルを生成します。
spp2tsp | 指定されたサービス定義ファイルおよびそのサービス定義ファイルが参照するデータ型定義ファイルを基に，TSP実装クラス，XML Webサービスクラス，asmxファイル，カスタムレコードクラス，クライアントスタブ，および構成ファイルを生成します。
cnnnidgen | Connector .NETのMSDTC連携機能で使用するノード識別子を生成し，文字列で標準出力に表示します。
cnntrsls | トランザクションリカバリサービスの状態をアプリケーションドメインごとに一覧表示します。

if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））

形式

if2cstub {-t {svr|clt|con}
       〔-l {cs|vjs|vb}〕
       〔-s 生成ファイル拡張子〕
       〔-n 名前空間名称〕
       〔-o 出力先ディレクトリ〕
       〔-r スタブクラス名称〕
       〔-c {struct|nostruct}〕
       〔-X {normal|dataset}〕
       〔-m RPCメッセージの最大長〕
         -i .NETインタフェース定義ファイル名称
         インタフェース名称
        |-h}

機能

C#，J#，またはVisual Basicで定義された .NETインタフェース定義を基に，クライアントスタブクラスのソースファイル（以降，クライアントスタブソースファイルと呼びます）を生成します。

オプション

●-t　{svr｜clt｜con}

生成するクライアントスタブの種類を指定します。

オプションの指定と生成されるクライアントスタブを次に示します。

オプションの指定 | 生成されるクライアントスタブ
svr | SPP.NETまたはSUP.NET（Extension .NET）用
clt | CUP.NET（Client .NET）用
con | CUP.NET（Connector .NET）用

●-l　{cs｜vjs｜vb}

生成するクライアントスタブソースファイルのプログラム言語を指定します。

このオプションを省略した場合，入力元のソースファイルと同じプログラム言語で生成します。入力元のソースファイルのプログラム言語は，ファイルの拡張子を基に判断されます。

オプションの指定と生成されるクライアントスタブソースファイルのプログラム言語の関係を次に示します。

オプションの指定 | 生成されるクライアントスタブソースファイルのプログラム言語
cs | C#
vjs | J#
vb | Visual Basic

このオプションを省略した場合に生成されるクライアントスタブソースファイルのプログラム言語を次に示します。

入力元のソースファイルの拡張子 | 生成されるクライアントスタブソースファイルのプログラム言語
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-s　生成ファイル拡張子　　～〈文字列〉

生成するクライアントスタブソースファイルの拡張子を指定します。

このオプションを省略した場合，生成されるクライアントスタブソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるクライアントスタブソースファイルのプログラム言語 | 生成されるクライアントスタブソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するクライアントスタブクラスの名前空間名称を指定します。

このオプションを省略した場合，入力元のインタフェースが属する名前空間と同じ名前空間でクライアントスタブクラスが生成されます。入力元のインタフェースが名前空間なしの場合，名前空間なしのクライアントスタブクラスが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するクライアントスタブソースファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。なお，ファイル名はクライアントスタブごとに「〈名前空間を含まないスタブクラス名称〉.〈拡張子〉」で生成されます。

●-r　スタブクラス名称　　～〈文字列〉

生成するクライアントスタブのクラス名称を指定します。

このオプションを省略した場合，クラス名称は「〈インタフェース名称〉Stub」になります。

●-c　{struct｜nostruct}　　～《struct》

.NETインタフェース定義のメソッドのパラメタまたは戻り値にTP1ユーザ構造体を使用した場合に，クライアントスタブが利用するためのTP1ユーザ構造体クラスを出力するかどうかを指定します。

このオプションを省略した場合，TP1ユーザ構造体クラスを出力します。.NETインタフェース定義にTP1ユーザ構造体を指定していなかった場合，このオプションの指定は無視されます。

struct：TP1ユーザ構造体クラスを出力します。

nostruct：TP1ユーザ構造体クラスを出力しません。

●-X 　{normal｜dataset}

生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドが追加されます。

また，サービスメソッドに入力パラメタがある場合，入力データ用XMLスキーマファイルがサービスメソッドごとに出力されます。出力パラメタまたは戻り値がある場合，出力データ用XMLスキーマファイルがサービスメソッドごとに出力されます。

-tオプションにconを指定した場合だけ，このオプションの指定が有効になります。-tオプションにcon以外を指定した場合，このオプションの指定は無視されます。

このオプションを省略した場合，生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラスとなるサービスメソッドは追加されません。また，入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは出力されません。

normal：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させない場合に指定します。normalを指定した場合，出力される入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは，DataSetオブジェクトで利用できない場合があります。

dataset：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させて利用する場合に指定します。datasetを指定した場合，DataSetオブジェクトで利用できる入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルを出力します。また，その入力データ用XMLスキーマおよび出力データ用XMLスキーマに対応したクライアントスタブを出力します。

●-m　RPCメッセージの最大長　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

サービスメソッドが指定するRPCメッセージの最大長を指定します。

このオプションに1～8以外を指定した場合は，エラーが発生します。なお，このオプションは，-tオプションにsvrを指定したときだけ有効です。-tオプションの指定がsvr以外の場合は，-mオプションの指定は無視されます。

●-i　.NETインタフェース定義ファイル名称　　～〈ファイル名〉

入力元のインタフェースが定義されている.NETインタフェース定義ファイル名称を指定します。絶対パスまたは相対パスで指定してください。

.NETインタフェース定義を作成したプログラム言語は，このオプションで指定したファイルの拡張子によって次のように判断されます。

このオプションで指定した.NETインタフェース定義ファイルの拡張子 | .NETインタフェース定義を作成したプログラム言語の判断結果
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

コマンド引数

●インタフェース名称

生成したいクライアントスタブに対応するSPP.NETのインタフェース名称を完全限定名で指定します。インタフェース名称は一つだけ指定できます。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したクライアントスタブソースファイルの内容は変更しないでください。

入力元となる.NETインタフェース定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

if2tsp（TSP生成コマンド（.NETインタフェース定義用））

形式

if2tsp {〔-l {cs|vjs|vb}〕
       〔-s 生成ファイル拡張子〕
       〔-n 名前空間名称〕
       〔-o 出力先ディレクトリ〕
       〔-r クラス名称〕
       〔-c {struct|nostruct}〕
       〔-t soap〕
       〔-S {doc|rpc}〕
       〔-x {literal|encoded}〕
       〔-w XML Web サービスで使用するXML名前空間名称〕
       〔-N SOAPメッセージに関連づけられる名前空間名称〕
       〔-B {wsibp11|none}〕
       〔-A {true|false}〕
       〔-p Connector .NETが利用する構成定義のプロファイルID〕
         -i .NETインタフェース定義ファイル名称
         -g サービスグループ名
         インタフェース名称
        |-h}

機能

C#，J#，またはVisual Basicで定義された.NETインタフェース定義を基に，TSP実装クラス，XML Webサービスクラス，asmxファイル，クライアントスタブ，および構成ファイルを生成します。

オプション

●-l　{cs｜vjs｜vb}

生成するTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスのソースファイルのプログラム言語を指定します。

このオプションを省略した場合，入力元のソースファイルと同じプログラム言語で生成します。入力元のソースファイルのプログラム言語は，ファイルの拡張子を基に判断されます。

オプションの指定と，生成されるTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスのソースファイルのプログラム言語を次に示します。

オプションの指定 | 生成されるソースファイルのプログラム言語
cs | C#
vjs | J#
vb | Visual Basic

このオプションを省略した場合に生成されるTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスのソースファイルのプログラム言語を次に示します。

入力元ソースファイルの拡張子 | 生成されるソースファイルのプログラム言語
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-s　生成ファイル拡張子　　～〈文字列〉

生成するTSP実装クラス，XML Webサービスクラス，およびクライアントスタブの拡張子を指定します。

このオプションを省略した場合，生成されるTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスのソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるソースファイルのプログラム言語 | 生成されるソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスの名前空間名称を指定します。

このオプションを省略した場合，入力元のインタフェースが属する名前空間と同じ名前空間でTSP実装クラス，XML Webサービスクラス，およびクライアントスタブが生成されます。入力元のインタフェースが名前空間なしの場合，名前空間なしのTSP実装クラス，XML Webサービスクラス，およびクライアントスタブが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するTSP実装クラス，XML Webサービスクラス，クライアントスタブ，asmxファイル，および構成ファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。

●-r　クラス名称　　～〈文字列〉

生成するTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスのクラス名称，ならびに構成ファイルのファイル名称を指定します。

このオプションを指定した場合と省略した場合のクラス名称およびファイル名称は次のとおりです。

クラスおよびファイル | 生成されるクラス名称およびファイル名称
オプションを指定した場合 | オプションを省略した場合
TSP実装クラス | 〈クラス名称〉Proxy | 〈インタフェース名称〉Proxy
XML Webサービスクラス | 〈クラス名称〉WebService | 〈インタフェース名称〉WebService
クライアントスタブクラス | 〈クラス名称〉Stub | 〈インタフェース名称〉Stub
構成ファイル | 〈TSP実装クラス名称〉.config | 〈インタフェース名称〉Proxy.config

なお，上記の表の〈クラス名称〉部分だけが，-rオプションで指定するクラス名称です。

●-c　{struct｜nostruct}　　～《struct》

.NETインタフェース定義のメソッドのパラメタまたは戻り値にTP1ユーザ構造体を使用した場合に，クライアントスタブが利用するためのTP1ユーザ構造体クラスを出力するかどうかを指定します。

このオプションを省略した場合，TP1ユーザ構造体クラスを出力します。.NETインタフェース定義にTP1ユーザ構造体を指定していなかった場合，このオプションの指定は無視されます。

struct：TP1ユーザ構造体クラスを出力します。

nostruct：TP1ユーザ構造体クラスを出力しません。

●-t　soap

XML Webサービスクラスを生成します。

このオプションを省略した場合，XML Webサービスクラスは生成されません。

●-S　{doc｜rpc}　　～《doc》

XML Webサービスメソッドとの間で送受信されるSOAPメッセージの書式を指定します。このオプションは，-tオプションを指定した場合にだけ有効です。指定しなかった場合，-Sオプションの指定は無視されます。

このオプションを省略した場合，docが仮定されます。

オプションの指定と送受信されるSOAPメッセージの書式を次に示します。

オプションの指定 | 送受信されるSOAPメッセージの書式
doc | XML Webサービスメソッドとの間で送受信されるSOAPメッセージの書式は，Documentになります。
rpc | XML Webサービスメソッドとの間で送受信されるSOAPメッセージの書式は，RPCになります。

●-x　{literal｜encoded}　　～《literal》

XML Webサービスメソッドとの間で送受信されるSOAPパラメタの書式指定スタイルを指定します。このオプションは，-tオプションを指定した場合かつSOAPメッセージの書式がDocumentの場合にだけ有効です。-tオプションを指定しなかった場合，-xオプションの指定は無視されます。

-Sオプションにrpcを指定した場合，-xオプションの指定は無視され，encodedが仮定されます。

このオプションを省略した場合，literalが仮定されます。

オプションの指定と送受信されるSOAPパラメタの書式指定スタイルを次に示します。

オプションの指定 | 送受信されるSOAPパラメタの書式指定スタイル
literal | XML Webサービスメソッドとの間で送受信されるSOAPパラメタの書式指定スタイルは，Literalになります。
encoded | XML Webサービスメソッドとの間で送受信されるSOAPパラメタの書式指定スタイルは，Encodedになります。

●-w　XML Web サービスで使用するXML名前空間名称　　～〈文字列〉

XML Webサービスで使用するXML名前空間名称を指定します。このオプションは，-tオプションを指定した場合にだけ有効です。指定しなかった場合，-wオプションの指定は無視されます。

このオプションを省略した場合の名前空間名称は，.NET Frameworkのデフォルト値になります。.NET Frameworkのデフォルト値については，.NET Frameworkのドキュメントを参照してください。

●-N　SOAPメッセージに関連づけられる名前空間名称　　～〈文字列〉

XML Web サービスメソッドに対するSOAP要求，およびSOAP応答に関連づける名前空間を指定します。このオプションは，-tオプションを指定した場合にだけ有効です。指定しなかった場合，-Nオプションの指定は無視されます。また，メソッドごとに名前空間名称を指定することはできません。

このオプションを省略した場合の名前空間名称は，.NET Frameworkのデフォルト値になります。.NET Frameworkのデフォルト値については，.NET Frameworkのドキュメントを参照してください。

●-B　{wsibp11｜none}

XML Webサービスクラスが，WS-I Basic Profile 1.1に準拠するかどうかを宣言します。このオプションは-tオプションを指定し，かつ-Sオプションにdocを指定した場合だけ有効です。これらのオプションを指定しなかった場合は，-Bオプションの指定は無視されます。

wsibp11：XML Webサービスクラスが，WS-I Basic Profile 1.1に準拠していることを宣言します。XML Webサービスクラスに，WebServiceBinding.ConformsToプロパティの値としてWsiProfiles.BasicProfile1_1が付加されます。

none：XML Webサービスクラスが，WS-I Basic Profile 1.1に準拠していることを宣言しません。XML Webサービスクラスに，WebServiceBinding.ConformsToプロパティの値としてWsiProfiles.Noneが付加されます。

●-A　{true｜false}

XML WebサービスクラスのWebサービス記述言語（WSDL）ファイルで，WS-I Basic Profile準拠の表示をするかどうかを指定します。このオプションは-Bオプションを指定した場合だけ有効です。このオプションを省略した場合，WSDLファイルでWS-I Basic Profile準拠に関する表示はされません。

true：WSDLファイルで，-Bオプションで指定したWS-I Basic Profile準拠の表示をします。XML Webサービスクラスに，WebServiceBinding.EmitConformanceClaimsプロパティの値としてtrueが付加されます。

false：WSDLファイルで，-Bオプションで指定したWS-I Basic Profile準拠の表示をしません。XML Webサービスクラスに，WebServiceBinding.EmitConformanceClaimsプロパティの値としてfalseが付加されます。

●-p　Connector .NETが利用する構成定義のプロファイルID　　～〈文字列〉

Connector .NETが利用する構成定義のプロファイルIDを指定します。

このオプションを省略した場合，デフォルトプロファイルの情報を利用してConnector .NETを使用します。

●-i　.NETインタフェース定義ファイル名称　　～〈ファイル名〉

入力元のインタフェースが定義されている.NETインタフェース定義ファイルを指定します。絶対パスまたは相対パスで指定してください。

.NETインタフェース定義を作成したプログラム言語は，このオプションで指定したファイルの拡張子によって次のように判断されます。

このオプションで指定した.NETインタフェース定義ファイルの拡張子 | .NETインタフェース定義を作成したプログラム言語の判断結果
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-g　サービスグループ名　　～〈31文字以内の識別子〉

呼び出したいSPP.NETのサービスグループ名を指定します。

このオプションの指定値をXML Webサービス生成後に変更したい場合は，サービスグループ名を構成ファイル（Web.configまたはmachine.config）に指定します。詳細については，「1.6.3　TSPの動作設定」を参照してください。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

コマンド引数

●インタフェース名称

生成したいTSPに対応するSPP.NETのインタフェース名称を完全限定名で指定します。インタフェース名称は一つだけ指定できます。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したTSPソースファイルの内容を変更しないでください。

入力元となる.NETインタフェース定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

spp2cstub（クライアントスタブ生成コマンド（サービス定義用））

形式

spp2cstub {-t {svr|clt|con}
        〔-l {cs|vb|vjs}〕
        〔-s 生成ファイル拡張子〕
        〔-n 名前空間名称〕
        〔-o 出力先ディレクトリ〕
        〔-r スタブクラス名称〕
        〔-R データ型定義名称:カスタムレコードクラス名称
             〔,データ型定義名称:カスタムレコードクラス名称〕…〕
        〔-F {space|null}〕
        〔-I エンコーディング名〕
        〔-O エンコーディング名〕
        〔-e {big|little}〕
        〔-E {big|little}〕
        〔-b〕
        〔-X {normal|dataset}〕
          -i サービス定義ファイル名称
         |-h}

機能

指定されたサービス定義ファイル，およびそのサービス定義ファイルが参照するデータ型定義ファイルを基に，クライアントスタブクラスおよびカスタムレコードクラスのソースファイルを生成します。

オプション

●-t　{svr｜clt｜con}

生成するクライアントスタブの種類を指定します。

オプションの指定と生成されるクライアントスタブを次に示します。

オプションの指定 | 生成されるクライアントスタブ
svr | SPP.NETまたはSUP.NET（Extension .NET）用
clt | CUP.NET（Client .NET）用
con | CUP.NET（Connector .NET）用

●-l　{cs｜vb｜vjs}　　～《cs》

生成するクライアントスタブクラスおよびカスタムレコードクラスのソースファイルのプログラム言語を指定します。クライアントスタブクラスとカスタムレコードクラスは同じプログラム言語で生成されます。

このオプションを省略した場合，csが仮定されます。

オプションの指定と生成されるソースファイルのプログラム言語を次に示します。

オプションの指定 | 生成されるソースファイルのプログラム言語
cs | C#
vjs | J#
vb | Visual Basic

●-s　生成ファイル拡張子　　～〈文字列〉

生成するクライアントスタブクラスおよびカスタムレコードクラスのソースファイルの拡張子を指定します。

このオプションを省略した場合，生成されるソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるソースファイルのプログラム言語 | 生成されるソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するクライアントスタブクラスおよびカスタムレコードクラスの名前空間名称を指定します。

このオプションを省略した場合，名前空間なしのクライアントスタブクラスおよびカスタムレコードクラスが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するクライアントスタブクラスおよびカスタムレコードクラスのソースファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。なお，ファイル名はクライアントスタブクラスごとに「〈名前空間を含まないスタブクラス名称〉.〈拡張子〉」，カスタムレコードクラスごとに「〈名前空間を含まないカスタムレコードクラス名称〉.〈拡張子〉」で生成されます。

●-r　スタブクラス名称　　～〈文字列〉

生成するクライアントスタブのクラス名称を指定します。

このオプションを省略した場合，クラス名称は「〈サービス定義名称〉Stub」になります。なお，一つのサービス定義ファイルには，一つのサービス定義しか指定できません。

●-R　データ型定義名称:カスタムレコードクラス名称　　～〈文字列〉:〈31文字以内の識別子〉

データ型定義ファイルで定義しているデータ型定義名称と，それを基にして生成するカスタムレコードのクラス名称を指定します。

このオプションを省略した場合，データ型定義名称がカスタムレコードのクラス名称に使用されます。

複数のデータ型定義からカスタムレコードを生成する場合は，データ型定義名称と生成されるカスタムレコードのクラス名称をコロン（:）で区切って指定します。ただし，データ型定義に存在しないデータ型定義名称を指定した場合，存在しないデータ型定義名称は無視されます。存在するデータ型定義名称に対してだけカスタムレコードクラス名称の指定が有効になります。

●-F　{space｜null}　　～《space》

入力レコードとなるカスタムレコードを引数として渡す場合，データ型定義で指定した文字列領域の余った領域に埋める文字を指定します。

このオプションを省略した場合，余った領域を半角スペースで埋めます。

space：半角スペースで埋めます。

null：ヌル文字で埋めます。

●-I　エンコーディング名　　～〈文字列〉

TP1/Serverへの送信データを，エンコードするときに従うエンコード方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。

このオプションを省略した場合，プラットフォームのデフォルトエンコーディング名になります。

サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名は次のとおりです。

エンコーディング名 | エンコード（Windows上の表示名） | 備考
euc-jp | 日本語（EUC） | －
iso-8859-1 | 西ヨーロッパ言語（ISO） | －
shift_jis | 日本語（シフト JIS） | MS932
unicodeFFFE | Unicode（Big-Endian） | －
us-ascii | US-ASCII | ISO646
utf-8 | Unicode（UTF-8） | －
utf-16 | Unicode | Little Endian

（凡例）

－：該当しません。

●-O　エンコーディング名　　～〈文字列〉

TP1/Serverから受け取った受信データを，デコードするときに従うエンコード方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。

このオプションを省略した場合，プラットフォームのデフォルトエンコーディング名になります。

サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名については，-Iオプションの表を参照してください。

●-e　{big｜little}　　～《big》

TP1/Serverへの送信データを，指定されたエンディアンに変換します。

このオプションを省略した場合，ビッグエンディアンに変換します。

big：ビッグエンディアンに変換します。

little：リトルエンディアンに変換します。

●-E　{big｜little}　　～《big》

TP1/Serverから受け取った受信データを，指定されたエンディアンであると仮定して変換します。

このオプションを省略した場合，ビッグエンディアンであると仮定して変換します。

big：ビッグエンディアンであると仮定して変換します。

little：リトルエンディアンであると仮定して変換します。

●-b

生成されたカスタムレコードクラスごとに必要なバッファサイズを標準出力に表示します。バッファプール機能を使用する場合で，バッファサイズの見積もりを行うときに使用します。

【表示例】

CustomRecordClassName : BufferSize[Bytes]
MyAppNS.Record1 : 448
MyAppNS.Record2 : 32

●-X 　{normal｜dataset}

生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドが追加されます。

また，入力データ用XMLスキーマファイルがサービスごとに出力されます。出力データ型定義名称がDC_NODATA以外の場合，出力データ用XMLスキーマファイルがサービスごとに出力されます。複数のサービスで同じデータ型定義名称を指定した場合，そのデータ型定義に対応する入力データ用XMLスキーマおよび出力データ用XMLスキーマは，一つだけ出力されます。

-tオプションにconを指定した場合だけ，このオプションの指定が有効になります。-tオプションにcon以外を指定した場合，このオプションの指定は無視されます。

このオプションを省略した場合，生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラスとなるサービスメソッドは追加されません。また，入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは出力されません。

normal：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させない場合に指定します。normalを指定した場合，出力される入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは，DataSetオブジェクトで利用できない場合があります。

dataset：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させて利用する場合に指定します。datasetを指定した場合，DataSetオブジェクトで利用できる入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルを出力します。また，その入力データ用XMLスキーマおよび出力データ用XMLスキーマに対応したクライアントスタブを出力します。

●-i　サービス定義ファイル名称　　～〈ファイル名〉

サービス定義が指定されているファイル名称を指定します。絶対パスまたは相対パスで指定してください。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したソースファイルの内容は変更しないでください。

サービス定義ファイルの#includeディレクティブには，サービス定義ファイルの存在するディレクトリからの相対パスを指定します。#includeディレクティブに相対パスを指定していない場合は，データ型定義ファイルはサービス定義ファイルと同じディレクトリになければなりません。

入力元となるサービス定義ファイルおよびデータ型定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

spp2tsp（TSP生成コマンド（サービス定義用））

形式

spp2tsp {〔-l {cs|vjs|vb}〕
        〔-s 生成ファイル拡張子〕
        〔-n 名前空間名称〕
        〔-o 出力先ディレクトリ〕
        〔-r クラス名称〕
        〔-t soap〕
        〔-S {doc|rpc}〕
        〔-x {literal|encoded}〕
        〔-w XML Web サービスで使用するXML名前空間名称〕
        〔-N SOAPメッセージに関連づけられる名前空間名称〕
        〔-B {wsibp11|none}〕
        〔-A {true|false}〕
        〔-p Connector .NETが利用する構成定義のプロファイルID〕
        〔-R データ型定義名称:カスタムレコードクラス名称
             〔,データ型定義名称:カスタムレコードクラス名称〕…〕
        〔-F {space|null}〕
        〔-I エンコーディング名〕
        〔-O エンコーディング名〕
        〔-e {big|little}〕
        〔-E {big|little}〕
        〔-b〕
        〔-d〕
          -g サービスグループ名
          -i サービス定義ファイル名称
         |-h}

機能

指定されたサービス定義ファイルおよびそのサービス定義ファイルが参照するデータ型定義ファイルを基に，TSP実装クラス，XML Webサービスクラス，asmxファイル，カスタムレコードクラス，クライアントスタブ，および構成ファイルを生成します。

オプション

●-l　{cs｜vjs｜vb}　　～《cs》

生成するTSP実装クラス，XML Webサービスクラス，カスタムレコードクラス，およびクライアントスタブクラスのソースファイルのプログラム言語を指定します。

このオプションを省略した場合，csが仮定されます。

オプションの指定と生成されるTSP実装クラス，XML Webサービスクラス，カスタムレコードクラス，およびクライアントスタブクラスのソースファイルのプログラム言語を次に示します。

オプションの指定 | 生成されるソースファイルのプログラム言語
cs | C#
vjs | J#
vb | Visual Basic

●-s　生成ファイル拡張子　　～〈文字列〉

生成するTSP実装クラス，XML Webサービスクラス，カスタムレコードクラス，およびクライアントスタブの拡張子を指定します。

このオプションを省略した場合，生成されるTSP実装クラス，XML Webサービスクラス，カスタムレコードクラス，およびクライアントスタブクラスのソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるソースファイルのプログラム言語 | 生成されるソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するTSP実装クラス，XML Webサービスクラス，カスタムレコードクラス，およびクライアントスタブクラスの名前空間名称を指定します。

このオプションを省略した場合，名前空間なしのTSP実装クラス，XML Webサービスクラス，カスタムレコードクラス，およびクライアントスタブが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するTSP実装クラス，XML Webサービスクラス，asmxファイル，カスタムレコードクラス，クライアントスタブ，および構成ファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。

●-r　クラス名称　　～〈文字列〉

生成するTSP実装クラス，XML Webサービスクラス，およびクライアントスタブクラスのクラス名称，ならびに構成ファイルのファイル名称を指定します。

このオプションを指定した場合と省略した場合のクラス名称およびファイル名称は次のとおりです。

クラスおよびファイル | 生成されるクラス名称およびファイル名称
オプションを指定した場合 | オプションを省略した場合
TSP実装クラス | 〈クラス名称〉Proxy | 〈サービス定義名称〉Proxy
XML Webサービスクラス | 〈クラス名称〉WebService | 〈サービス定義名称〉WebService
クライアントスタブクラス | 〈クラス名称〉Stub | 〈サービス定義名称〉Stub
構成ファイル | 〈TSP実装クラス名称〉.config | 〈サービス定義名称〉Proxy.config

なお，上記の表の〈クラス名称〉部分だけが，-rオプションで指定するクラス名称です。

●-t　soap

XML Webサービスクラスを生成します。

このオプションを省略した場合，XML Webサービスクラスは生成されません。

●-S　{doc｜rpc}　　～《doc》

XML Webサービスメソッドとの間で送受信されるSOAPメッセージの書式を指定します。このオプションは，-tオプションを指定した場合にだけ有効です。指定しなかった場合，-Sオプションの指定は無視されます。

このオプションを省略した場合，docが仮定されます。

オプションの指定と送受信されるSOAPメッセージの書式を次に示します。

オプションの指定 | 送受信されるSOAPメッセージの書式
doc | XML Webサービスメソッドとの間で送受信されるSOAPメッセージの書式は，Documentになります。
rpc | XML Webサービスメソッドとの間で送受信されるSOAPメッセージの書式は，RPCになります。

●-x　{literal｜encoded}　　～《literal》

XML Webサービスメソッドとの間で送受信されるSOAPパラメタの書式指定スタイルを指定します。このオプションは，-tオプションを指定した場合かつSOAPメッセージの書式がDocumentの場合にだけ有効です。-tオプションを指定しなかった場合，-xオプションの指定は無視されます。

-Sオプションにrpcを指定した場合，-xオプションの指定は無視され，encodedが仮定されます。

このオプションを省略した場合，literalが仮定されます。

オプションの指定と送受信されるSOAPパラメタの書式指定スタイルを次に示します。

オプションの指定 | 送受信されるSOAPパラメタの書式指定スタイル
literal | XML Webサービスメソッドとの間で送受信されるSOAPパラメタの書式指定スタイルは，Literalになります。
encoded | XML Webサービスメソッドとの間で送受信されるSOAPパラメタの書式指定スタイルは，Encodedになります。

●-w　XML Web サービスで使用するXML名前空間名称　　～〈文字列〉

XML Webサービスで使用するXML名前空間名称を指定します。このオプションは，-tオプションを指定した場合にだけ有効です。指定しなかった場合，-wオプションの指定は無視されます。

このオプションを省略した場合の名前空間名称は，.NET Frameworkのデフォルト値になります。.NET Frameworkのデフォルト値については，.NET Frameworkのドキュメントを参照してください。

●-N　SOAPメッセージに関連づけられる名前空間名称　　～〈文字列〉

XML Webサービスメソッドに対するSOAP要求，およびSOAP応答に関連づける名前空間を指定します。このオプションは，-tオプションを指定した場合にだけ有効です。指定しなかった場合，-Nオプションの指定は無視されます。また，メソッドごとに名前空間名称を指定することはできません。

このオプションを省略した場合の名前空間名称は，.NET Frameworkのデフォルト値になります。.NET Frameworkのデフォルト値については，.NET Frameworkのドキュメントを参照してください。

●-B　{wsibp11｜none}

XML Webサービスクラスが，WS-I Basic Profile 1.1に準拠するかどうかを宣言します。このオプションは-tオプションを指定し，かつ-Sオプションにdocを指定した場合だけ有効です。これらのオプションを指定しなかった場合は，-Bオプションの指定は無視されます。

wsibp11：XML Webサービスクラスが，WS-I Basic Profile 1.1に準拠していることを宣言します。XML Webサービスクラスに，WebServiceBinding.ConformsToプロパティの値としてWsiProfiles.BasicProfile1_1が付加されます。

none：XML Webサービスクラスが，WS-I Basic Profile 1.1に準拠していることを宣言しません。XML Webサービスクラスに，WebServiceBinding.ConformsToプロパティの値としてWsiProfiles.Noneが付加されます。

●-A　{true｜false}

XML WebサービスクラスのWebサービス記述言語（WSDL）ファイルで，WS-I Basic Profile準拠の表示をするかどうかを指定します。このオプションは-Bオプションを指定した場合だけ有効です。このオプションを省略した場合，WSDLファイルでWS-I Basic Profile準拠に関する表示はされません。

true：WSDLファイルで，-Bオプションで指定したWS-I Basic Profile準拠の表示をします。XML Webサービスクラスに，WebServiceBinding.EmitConformanceClaimsプロパティの値としてtrueが付加されます。

false：WSDLファイルで，-Bオプションで指定したWS-I Basic Profile準拠の表示をしません。XML Webサービスクラスに，WebServiceBinding.EmitConformanceClaimsプロパティの値としてfalseが付加されます。

●-p　Connector .NETが利用する構成定義のプロファイルID　　～〈文字列〉

Connector .NETが使用する構成定義のプロファイルIDを指定します。

このオプションが省略された場合，デフォルトプロファイルの情報を利用してConnector .NETを使用します。

●-R　データ型定義名称:カスタムレコードクラス名称　　～〈文字列〉:〈31文字以内の識別子〉

データ型定義ファイルで定義しているデータ型定義名称と，それを基にして生成するカスタムレコードのクラス名称を指定します。

このオプションを省略した場合，データ型定義名称がカスタムレコードのクラス名称に使用されます。

複数のデータ型定義からカスタムレコードを生成する場合は，データ型定義名称と生成されるカスタムレコードのクラス名称をコロン（:）で区切って指定します。ただし，データ型定義に存在しないデータ型定義名称を指定した場合，存在しないデータ型定義名称は無視されます。存在するデータ型定義名称に対してだけカスタムレコードクラス名称の指定が有効になります。

●-F　{space｜null}　　～《space》

入力レコードとなるカスタムレコードを引数として渡す場合，データ型定義で指定した文字列領域の余った領域に埋める文字を指定します。

このオプションを省略した場合，余った領域を半角スペースで埋めます。

space：半角スペースで埋めます。

null：ヌル文字で埋めます。

●-I　エンコーディング名　　～〈文字列〉

TP1/Serverへの送信データをエンコードするときに従うエンコード方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。

このオプションを省略した場合，プラットフォームのデフォルトエンコーディング名になります。

サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名は次のとおりです。

エンコーディング名 | エンコード（Windows上の表示名） | 備考
euc-jp | 日本語（EUC） | －
iso-8859-1 | 西ヨーロッパ言語（ISO） | －
shift_jis | 日本語（シフト JIS） | MS932
unicodeFFFE | Unicode（Big-Endian） | －
us-ascii | US-ASCII | ISO646
utf-8 | Unicode（UTF-8） | －
utf-16 | Unicode | Little Endian

（凡例）

－：該当しません。

●-O　エンコーディング名　　～〈文字列〉

TP1/Serverから受け取った受信データをデコードするときに従うエンコード方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。

このオプションを省略した場合，プラットフォームのデフォルトエンコーディング名になります。

プラットフォームによってサポートされているエンコード方式は異なります。代表的なエンコーディング名については，-Iオプションの表を参照してください。

●-e　{big｜little}　　～《big》

TP1/Serverへの送信データを，指定されたエンディアンに変換します。

このオプションを省略した場合，ビッグエンディアンに変換します。

big：ビッグエンディアンに変換します。

little：リトルエンディアンに変換します。

●-E　{big｜little}　　～《big》

TP1/Serverから受け取った受信データを，指定されたエンディアンであると仮定して変換します。

このオプションを省略した場合，ビッグエンディアンであると仮定して変換します。

big：ビッグエンディアンであると仮定して変換します。

little：リトルエンディアンであると仮定して変換します。

●-b

生成されたカスタムレコードクラスごとに必要なバッファサイズを標準出力に表示します。バッファプーリング機能を使用する場合で，バッファサイズの見積もりを行うときに使用します。

【表示例】

CustomRecordClassName : BufferSize[Bytes]
MyAppNS.Record1 : 448
MyAppNS.Record2 : 32

●-d

-Fオプションでnullを指定し，かつ-tオプションを指定した場合，XML Webサービスクラスで出力レコードの文字領域の末尾のヌル文字を削除します。文字領域の末尾の文字がヌル文字でなくなるまでヌル文字を削除します。

このオプションを指定した場合，XML Webサービスクラスでヌル文字を削除しません。-Fオプションでnullを指定し，かつ-tオプションを指定しない場合，このオプションの指定は無視されます。

●-g　サービスグループ名　　～〈31文字以内の識別子〉

呼び出したいSPP.NETまたはSPPのサービスグループ名を指定します。

このオプションの指定値をXML Webサービス生成後に変更したい場合は，サービスグループ名を構成ファイル（Web.configまたはmachine.config）に指定します。詳細については，「1.6.3　TSPの動作設定」を参照してください。

●-i　サービス定義ファイル名称　　～〈ファイル名〉

サービス定義が指定されているファイル名称を指定します。絶対パスまたは相対パスで指定してください。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したソースファイルの内容は変更しないでください。

サービス定義ファイルの#includeディレクティブには，サービス定義ファイルの存在するディレクトリからの相対パスを指定します。#includeディレクティブに相対パスを指定していない場合は，データ型定義ファイルはサービス定義ファイルと同じディレクトリになければなりません。

入力元となるサービス定義ファイルおよびデータ型定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

データ型定義名称と構造体名称で同じ名称を使用したデータ型定義を利用したサービス定義から，XML Webサービスを生成した場合，XML型名の重複によって，実行時にエラーとなります。そのため，データ型定義名称と構造体名称で同じ名称を使用しないようにしてください。一つのサービス定義が参照するデータ型定義が複数あり，その中に同じデータ型定義名称または構造体名称がある場合も，同様にエラーとなります。

cnnnidgen（MSDTC連携機能で使用するノード識別子生成コマンド）

形式

cnnnidgen 〔-h〕

機能

Connector .NETのMSDTC連携機能で使用するノード識別子を生成し，文字列で標準出力に表示します。

オプション

●オプションなしの場合

Connector .NETのMSDTC連携機能で使用するノード識別子を生成し，文字列で標準出力に表示します。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

出力形式

●オプションなしの場合

aa....aa

aa....aa：ノード識別子
ノード識別子を文字列で表示します。

【表示例】

A78E26AE-3A1E-42fe-B0D0-8DFCD0783B55

cnntrsls（トランザクションリカバリサービスの状態表示コマンド）

形式

cnntrsls 〔-h〕

機能

トランザクションリカバリサービスの状態をアプリケーションドメインごとに一覧表示します。

オプション

●オプションなしの場合

トランザクションリカバリサービスの状態をアプリケーションドメインごとに一覧表示します。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

出力形式

●オプションなしの場合

started time  RMID      ApplicationDomain name
aa....aa      bb....bb  cc....cc
  ：            ：        ：

aa....aa：アプリケーションドメインの監視開始時刻
トランザクションリカバリサービスがアプリケーションドメインの監視を開始した時刻を表示します。監視時刻の範囲は，西暦0001年1月1日の00:00:00～9999年12月31日の23:59:59です。
例えば，西暦0001年1月1日の00:00:00の場合は次のように表示されます。

0001/01/01 00:00:00

bb....bb：RMID
RMIDを文字列で表示します。

cc....cc：アプリケーションドメイン名
監視対象のアプリケーションドメイン名を文字列で表示します。

【表示例】

5.　クラスリファレンス

この章では，Connector .NETで利用できるクラスについて説明します。

＜この章の構成＞

Connector .NETで利用できるクラス

IndexedRecord

MessageBuffer

RpcInfo

TcnIllegalArgumentException

TcnIllegalStateException

TcnNotUsedException

TcpipConnection

TcpipInfo

TP1Connection

TP1ConnectionManager

TP1ConnectorError

TP1ConnectorException

TP1IntegrationBehavior

TP1IntegrationBinding

TP1RpcClient

Connector .NETで利用できるクラス

Connector .NETで利用できるクラスの一覧を次に示します。

表5-1　Connector .NETで利用できるクラスの一覧

名前空間
クラス名
説明

Hitachi.OpenTP1.Connector
IndexedRecord
ArrayList型のレコードクラスです。
TP1ConnectionクラスのExecuteメソッドの入出力パラメタとして使用します。

MessageBuffer
インデクスドレコードの入出力電文の電文保持領域として内部にバッファを持ちます。保持しているバッファはTP1ConnectionManagerクラスが管理しているバッファプールから割り当てられたものです。

RpcInfo
アプリケーションがOpenTP1のSPP（SPP.NET）に対してリモートプロシジャコール（RPC）機能を実行するために必要な追加情報をTP1Connectionクラスに渡すために使用します。

TcnIllegalArgumentException
メソッド呼び出し時のパラメタに不正な引数を指定した場合にスローされる例外です。

TcnIllegalStateException
不正または不適切なタイミングにメソッドが呼び出された場合にスローされる例外です。

TcnNotUsedException
指定された機能が使用できないときにスローされる例外です。

TcpipConnection
MHPまたは他システムとTCP/IP通信を行う機能を提供します。

TcpipInfo
アプリケーションがMHPまたは他システムに対してTCP/IP通信機能を使用するために必要な追加情報をTcpipConnectionに渡すために使用します。

TP1Connection
OpenTP1と対話する機能を提供します。

TP1ConnectionManager
OpenTP1との対話に必要なさまざまなオブジェクト（コネクション，レコードなど）を取得する機能を提供します。

TP1ConnectorError
TP1ConnectorErrorの概要の説明です。

TP1ConnectorException
Connector .NETで利用されるExceptionクラスのルートとなるExceptionクラスです。

Hitachi.OpenTP1.ServiceModel.TP1Integration
TP1IntegrationBehavior
TP1IntegrationBindingのEndpointの設定が正しいかどうかを検証する機能を提供します。

TP1IntegrationBinding
OpenTP1へのサービス要求を実現するBindingを提供します。

TP1RpcClient
WCFのクライアントから，TP1IntegrationBindingによるOpenTP1へのサービス要求を可能にする機能を提供するWCFのプロキシクラスです。

IndexedRecord

IndexedRecordの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- System.Collections.ArrayList
   +- Hitachi.OpenTP1.Connector.IndexedRecord

実装インタフェース

System.Collections.IList

System.Collections.ICollection

System.Collections.IEnumerable

System.ICloneable

Hitachi.OpenTP1.Common.IStreamable

Hitachi.OpenTP1.IRecord

説明

ArrayList型のレコードクラスです。TP1ConnectionクラスのExecuteメソッドの入出力パラメタとして使用します。

メソッドの一覧

名称 | 説明
Equals(System.Object) | このオブジェクトとほかのオブジェクトが等しいかどうかを示します。
GetHashCode() | IndexedRecordインスタンスのハッシュ値を返します。
GetRecordName() | レコード名称を取得します。
GetRecordShortDescription() | レコードの簡易説明を取得します。
SetRecordName(System.String) | レコード名称を設定します。
SetRecordShortDescription(System.String) | レコードの簡易説明を設定します。

メソッドの詳細

●Equals

説明

このオブジェクトとほかのオブジェクトが等しいかどうかを示します。

同一クラスで，かつデータが同じであるかどうかを比較します。

宣言

【C#の場合】

public virtual System.Boolean Equals(
 System.Object other
);

【Visual Basicの場合】

Public Overridable Function Equals( _
 ByVal other As System.Object _
) As System.Boolean

【J#の場合】

public System.Boolean Equals(
 System.Object other
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS BASE AS ‘System.Object’.
IDENTIFICATION DIVISION.
METHOD-ID. Equals PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 other USAGE IS OBJECT REFERENCE BASE.
01 RESULT USAGE IS LOGICAL.
PROCEDURE DIVISION USING BY VALUE other RETURNING RESULT.
END METHOD Equals.

パラメタ

other

比較対象の参照オブジェクト。

戻り値

otherパラメタに指定されたオブジェクトとこのオブジェクトが等しい場合はtrue，等しくない場合はfalseが返ります。

例外

なし

●GetHashCode

説明

IndexedRecordインスタンスのハッシュ値を返します。

宣言

【C#の場合】

public virtual int GetHashCode(
);

【Visual Basicの場合】

Public Overridable Function GetHashCode( _
) As Integer

【J#の場合】

public int GetHashCode(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GetHashCode PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 RESULT USAGE IS BINARY-LONG.
PROCEDURE DIVISION RETURNING RESULT.
END METHOD GetHashCode.

パラメタ

なし

戻り値

このオブジェクトのハッシュ値を返します。

例外

なし

●GetRecordName

説明

レコード名称を取得します。

宣言

【C#の場合】

public virtual string GetRecordName(
);

【Visual Basicの場合】

Public Overridable Function GetRecordName( _
) As String

【J#の場合】

public System.String GetRecordName(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GetRecordName PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 RESULT USAGE IS STRING.
PROCEDURE DIVISION RETURNING RESULT.
END METHOD GetRecordName.

パラメタ

なし

戻り値

設定されているレコード名称が返ります。

例外

なし

●GetRecordShortDescription

説明

レコードの簡易説明を取得します。

宣言

【C#の場合】

public virtual string GetRecordShortDescription(
);

【Visual Basicの場合】

Public Overridable Function GetRecordShortDescription( _
) As String

【J#の場合】

public System.String GetRecordShortDescription(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GetRecordShortDescription PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 RESULT USAGE IS STRING.
PROCEDURE DIVISION RETURNING RESULT.
END METHOD GetRecordShortDescription.

パラメタ

なし

戻り値

レコードに設定されている簡易説明を返します。

例外

なし

●SetRecordName

説明

レコード名称を設定します。

宣言

【C#の場合】

public virtual void SetRecordName(
 string recordName
);

【Visual Basicの場合】

Public Overridable Sub SetRecordName( _
 ByVal recordName As String _
)

【J#の場合】

public void SetRecordName(
 System.String recordName
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. SetRecordName PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 recordName USAGE IS STRING.
PROCEDURE DIVISION USING BY VALUE recordName.
END METHOD SetRecordName.

パラメタ

recordName

新たに設定するレコード名称。

戻り値

なし

例外

なし

●SetRecordShortDescription

説明

レコードの簡易説明を設定します。

宣言

【C#の場合】

public virtual void SetRecordShortDescription(
 string des
);

【Visual Basicの場合】

Public Overridable Sub SetRecordShortDescription( _
 ByVal des As String _
)

【J#の場合】

public void SetRecordShortDescription(
 System.String des
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. SetRecordShortDescription PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 des USAGE IS STRING.
PROCEDURE DIVISION USING BY VALUE des.
END METHOD SetRecordShortDescription.

パラメタ

des

新たに設定するレコードの簡易説明。

戻り値

なし

例外

なし

MessageBuffer

MessageBufferの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.MessageBuffer

説明

MessageBufferクラスはインデクスドレコードの入出力電文の電文保持領域として内部にバッファを持ちます。保持しているバッファはTP1ConnectionManagerクラスが管理しているバッファプールから割り当てられたものです。

プロパティの一覧

名称 | 説明
Buffer | メッセージバッファ内に保持しているバッファの参照を返します。
BufferSize | メッセージバッファに保持しているバッファのサイズを取得します。
MessageLength | メッセージバッファが保持しているメッセージ長を取得および設定します。

メソッドの一覧

名称 | 説明
Append(Hitachi.OpenTP1.Connector.MessageBuffer) | 指定されたメッセージバッファのデータを，メッセージバッファが保持するバッファにコピーします。
Append(System.Byte[]) | 指定されたバイト配列のデータをメッセージバッファが保持するバッファにコピーします。
ReleaseMessageBuffer() | メッセージバッファ内に保持しているバッファをTP1ConnectionManagerクラスが管理しているプールに返します。

プロパティの詳細

●Buffer

説明

メッセージバッファ内に保持しているバッファの参照を返します。

宣言

【C#の場合】

public virtual byte[] Buffer {get;}

【Visual Basicの場合】

Public Overridable ReadOnly Property Buffer As Byte()

【J#の場合】

public ubyte[] get_Buffer();

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS BYTE-ARRAY AS ‘System.Byte’ IS ARRAY.
IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY Buffer IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE IS OBJECT REFERENCE BYTE-ARRAY.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

例外

なし

●BufferSize

説明

メッセージバッファに保持しているバッファのサイズを取得します。

宣言

【C#の場合】

public virtual int BufferSize {get;}

【Visual Basicの場合】

Public Overridable ReadOnly Property BufferSize As Integer

【J#の場合】

public int get_BufferSize();

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY BufferSize IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

例外

なし

●MessageLength

説明

メッセージバッファが保持しているメッセージ長を取得および設定します。

宣言

【C#の場合】

public virtual int MessageLength {get; set;}

【Visual Basicの場合】

Public Overridable Property MessageLength As Integer

【J#の場合】

public int get_MessageLength();
public void set_MessageLength(int);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY MessageLength IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY MessageLength IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TcnIllegalArgumentException

次のどれかの場合に発生します。

バッファがnullの場合

指定されたメッセージ長が1未満の場合

バッファの長さより長い場合

メソッドの詳細

●Append

説明

指定されたメッセージバッファのデータを，メッセージバッファが保持するバッファにコピーします。

宣言

【C#の場合】

public virtual void Append(
 Hitachi.OpenTP1.Connector.MessageBuffer message
);

【Visual Basicの場合】

Public Overridable Sub Append( _
 ByVal message As _
 Hitachi.OpenTP1.Connector.MessageBuffer _
)

【J#の場合】

public void Append(
 Hitachi.OpenTP1.Connector.MessageBuffer message
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS MESSAGEBUFFER AS ‘Hitachi.OpenTP1.Connector.MessageBuffer’.
IDENTIFICATION DIVISION.
METHOD-ID. Append PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 message USAGE IS OBJECT REFERENCE MESSAGEBUFFER.
PROCEDURE DIVISION USING BY VALUE message.
END METHOD Append.

パラメタ

message

設定するメッセージ。

戻り値

なし

例外

Hitachi.OpenTP1.Connector.TcnIllegalArgumentException

電文がnullです。

Hitachi.OpenTP1.Connector.TcnIllegalStateException

バッファがnullの場合，または電文長がバッファのサイズを超える場合に発生します。

●Append

説明

指定されたバイト配列のデータをメッセージバッファが保持するバッファにコピーします。

宣言

【C#の場合】

public virtual void Append(
 byte[] message
);

【Visual Basicの場合】

Public Overridable Sub Append( _
 ByVal message() As Byte _
)

【J#の場合】

public void Append(
 ubyte[] message
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS BYTE-ARRAY AS ‘System.Byte’ IS ARRAY.
IDENTIFICATION DIVISION.
METHOD-ID. Append PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 message USAGE IS OBJECT REFERENCE BYTE-ARRAY.
PROCEDURE DIVISION USING BY VALUE message.
END METHOD Append.

パラメタ

message

設定するメッセージ。

戻り値

なし

例外

Hitachi.OpenTP1.Connector.TcnIllegalArgumentException

電文がnullです。

Hitachi.OpenTP1.Connector.TcnIllegalStateException

バッファがnullの場合，または電文長がバッファのサイズを超える場合に発生します。

●ReleaseMessageBuffer

説明

メッセージバッファ内に保持しているバッファをTP1ConnectionManagerクラスが管理しているプールに返します。

宣言

【C#の場合】

public virtual void ReleaseMessageBuffer(
);

【Visual Basicの場合】

Public Overridable Sub ReleaseMessageBuffer( _
)

【J#の場合】

public void ReleaseMessageBuffer(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. ReleaseMessageBuffer PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD ReleaseMessageBuffer.

パラメタ

なし

戻り値

なし

例外

なし

RpcInfo

RpcInfoの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.RpcInfo

説明

アプリケーションがOpenTP1のSPP（SPP.NET）に対してリモートプロシジャコール（RPC）機能を実行するために必要な追加情報をTP1Connectionクラスに渡すために使用します。COBOL言語からの定数値のフィールドを使用する場合は，「付録B　Connector .NETで利用できるクラスのフィールド」を参照して，対応する値を指定してください。

コンストラクタの一覧

名称 | 説明
RpcInfo() | RpcInfoオブジェクトを生成します。

フィールドの一覧

名称
説明

DCNOFLAGS
RPCの形態として同期応答型RPCを指定します。

DCRPC_CHAINED
RPCの形態として連鎖RPCを指定します。

DCRPC_MAX_MESSAGE_SIZE
RPC電文の最大長（1048576バイト）です。

DCRPC_NOREPLY
RPCの形態として非応答型RPCを指定します。

DCRPC_TPNOTRAN
トランザクションの処理からのRPCをトランザクションとしないサービス要求にできます。
RPCの形態を示す値と組み合わせて指定します。

プロパティの一覧

名称 | 説明
Flags | Flagsプロパティは，RPC実行時にサービス呼び出し形態を設定および取得します。
ServiceGroupName | ServiceGroupNameプロパティは，RPC実行時に呼び出すサービスグループ名を取得および設定します。
ServiceName | ServiceNameプロパティは，RPC実行時に呼び出すサービス名を取得および設定します。
WatchTime | WatchTimeプロパティは，同期応答型RPCの場合にSPP（SPP.NET）へサービス要求を送ってからサービスの応答が返るまでの最大応答待ち時間を設定および取得します。

コンストラクタの詳細

●RpcInfo

説明

RpcInfoオブジェクトを生成します。

宣言

【C#の場合】

public RpcInfo(
);

【Visual Basicの場合】

Public New( _
)

【J#の場合】

public RpcInfo(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
AUTO-METHOD. CONSTRUCTOR.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END AUTO-METHOD.

パラメタ

なし

例外

なし

フィールドの詳細

●DCNOFLAGS

説明

RPCの形態として同期応答型RPCを指定します。

宣言

【C#の場合】

public const int DCNOFLAGS

【Visual Basicの場合】

Public Const DCNOFLAGS As Integer

【J#の場合】

public static final int DCNOFLAGS

●DCRPC_CHAINED

説明

RPCの形態として連鎖RPCを指定します。

宣言

【C#の場合】

public const int DCRPC_CHAINED

【Visual Basicの場合】

Public Const DCRPC_CHAINED As Integer

【J#の場合】

public static final int DCRPC_CHAINED

●DCRPC_MAX_MESSAGE_SIZE

説明

RPC電文の最大長（1048576バイト）です。

宣言

【C#の場合】

public const int DCRPC_MAX_MESSAGE_SIZE

【Visual Basicの場合】

Public Const DCRPC_MAX_MESSAGE_SIZE As Integer

【J#の場合】

public static final int DCRPC_MAX_MESSAGE_SIZE

●DCRPC_NOREPLY

説明

RPCの形態として非応答型RPCを指定します。

宣言

【C#の場合】

public const int DCRPC_NOREPLY

【Visual Basicの場合】

Public Const DCRPC_NOREPLY As Integer

【J#の場合】

public static final int DCRPC_NOREPLY

●DCRPC_TPNOTRAN

説明

トランザクションの処理からのRPCをトランザクションとしないサービス要求にできます。

RPCの形態を示す値と組み合わせて指定します。

宣言

【C#の場合】

public const int DCRPC_TPNOTRAN

【Visual Basicの場合】

Public Const DCRPC_TPNOTRAN As Integer

【J#の場合】

public static final int DCRPC_TPNOTRAN

プロパティの詳細

●Flags

説明

Flagsプロパティは，RPC実行時のサービス呼び出し形態を設定および取得します。

宣言

【C#の場合】

public virtual int Flags {get; set;}

【Visual Basicの場合】

Public Overridable Property Flags As Integer

【J#の場合】

public int get_Flags();
public void set_Flags(int);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY Flags IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY Flags IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

指定された値が不正です。または，指定されたフラグの組み合わせが不正です。

●ServiceGroupName

説明

ServiceGroupNameプロパティは，RPC実行時に呼び出すサービスグループ名を取得および設定します。

宣言

【C#の場合】

public virtual string ServiceGroupName {get; set;}

【Visual Basicの場合】

Public Overridable Property ServiceGroupName As String

【J#の場合】

public System.String get_ServiceGroupName();
public void set_ServiceGroupName(System.String);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY ServiceGroupName IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE STRING.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY ServiceGroupName IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE STRING.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

指定された引数が不正です。

値がnull，""，またはサービスグループ名が31文字を超えています。

●ServiceName

説明

ServiceNameプロパティは，RPC実行時に呼び出すサービス名を取得および設定します。

宣言

【C#の場合】

public virtual string ServiceName {get; set;}

【Visual Basicの場合】

Public Overridable Property ServiceName As String

【J#の場合】

public System.String get_ServiceName();
public void set_ServiceName(System.String);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY ServiceName IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE STRING.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY ServiceName IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE STRING.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

指定された引数が不正です。

値がnull，またはサービス名が31文字を超えています。

●WatchTime

説明

WatchTimeプロパティは，同期応答型RPCの場合にSPP（SPP.NET）へサービス要求を送ってからサービスの応答が返るまでの最大応答待ち時間を設定および取得します。

最大応答待ち時間は-1から65535（単位：秒）までの範囲で指定します。0を指定した場合は，応答を受信するまで無限に待ちます。-1（初期値）を指定した場合は，対応するClient .NET構成定義の設定に従います。

指定時間を過ぎても応答が返らない場合は，例外が発生します。

宣言

【C#の場合】

public virtual int WatchTime {get; set;}

【Visual Basicの場合】

Public Overridable Property WatchTime As Integer

【J#の場合】

public int get_WatchTime();
public void set_WatchTime(int);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY WatchTime IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY WatchTime IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

指定された引数が不正です。

-1未満か，または65535を超える値が指定されています。

TcnIllegalArgumentException

TcnIllegalArgumentExceptionの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.Connector.TP1ConnectorException
       +- Hitachi.OpenTP1.Connector.TcnIllegalArgumentException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

TcnIllegalArgumentExceptionクラスは，TP1ConnectorExceptionクラスを継承したConnector .NET用の拡張クラスです。

TcnIllegalArgumentExceptionクラスはメソッド呼び出し時のパラメタに不正な引数を指定した場合にスローされる例外です。

TcnIllegalStateException

TcnIllegalStateExceptionの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.Connector.TP1ConnectorException
       +- Hitachi.OpenTP1.Connector.TcnIllegalStateException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

TcnIllegalStateExceptionクラスは，TP1ConnectorExceptionクラスを継承したConnector .NET用の拡張クラスです。

TcnIllegalArgumentExceptionクラスは不正または不適切なタイミングにメソッドが呼び出された場合にスローされる例外です。

TcnNotUsedException

TcnNotUsedExceptionの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.Connector.TP1ConnectorException
       +- Hitachi.OpenTP1.Connector.TcnNotUsedException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

TcnNotUsedExceptionクラスは，TP1ConnectorExceptionクラスを継承したConnector .NET用の拡張クラスです。

TcnNotUsedExceptionクラスは，指定された機能が使用できないときにスローされる例外です。

TcpipConnection

TcpipConnectionの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.TcpipConnection

実装インタフェース

Hitachi.OpenTP1.Connector.ITP1Connection

System.IDisposable

説明

TcpipConnectionクラスは，MHPまたは他システムとTCP/IP通信を行う機能を提供します。

メソッドの一覧

名称 | 説明
Disconnect() | 接続中の物理コネクションを解放します。
Dispose() | コネクションをコネクションプールに戻します。
Execute(Hitachi.OpenTP1.Connector.TcpipInfo, Hitachi.OpenTP1.IRecord, Hitachi.OpenTP1.IRecord) | TCP/IP通信を実行します。

メソッドの詳細

●Disconnect

説明

接続中の物理コネクションを解放します。

宣言

【C#の場合】

public void Disconnect(
);

【Visual Basicの場合】

Public Sub Disconnect( _
)

【J#の場合】

public void Disconnect(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. Disconnect PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD Disconnect.

パラメタ

なし

戻り値

なし

例外

なし

注意事項

接続中のすべての物理コネクションを解放します。

内部で保持しているTP1ClientオブジェクトにCloseRpcメソッドを発行します。

そのため，同じプロファイルIDでTP1Connectionと併用している場合には，常設コネクションもクローズされます。

●Dispose

説明

コネクションをコネクションプールに戻します。

宣言

【C#の場合】

public sealed virtual void Dispose(
);

【Visual Basicの場合】

Public Overrides NotOverridable Overridable Sub Dispose( _
)

【J#の場合】

public final void Dispose(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. Dispose PUBLIC IS FINAL.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD Dispose.

パラメタ

なし

戻り値

なし

例外

なし

注意事項

コネクションをコネクションプールに戻します。

コネクションをコネクションプールに戻したあと，このオブジェクトに対してさまざまな処理を実行するとTP1ConnectorExceptionがスローされます。

●Execute

説明

TCP/IP通信を実行します。

宣言

【C#の場合】

public System.Boolean Execute(
 Hitachi.OpenTP1.Connector.TcpipInfo tcpipInfo,
 Hitachi.OpenTP1.IRecord input,
 Hitachi.OpenTP1.IRecord output
);

【Visual Basicの場合】

Public Function Execute( _
 ByVal tcpipInfo As Hitachi.OpenTP1.Connector.TcpipInfo, _
 ByVal input As Hitachi.OpenTP1.IRecord, _
 ByVal output As Hitachi.OpenTP1.IRecord _
) As System.Boolean

【J#の場合】

public System.Boolean Execute(
 Hitachi.OpenTP1.Connector.TcpipInfo tcpipInfo,
 Hitachi.OpenTP1.IRecord input,
 Hitachi.OpenTP1.IRecord output
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS TCPIPINFO AS ‘Hitachi.OpenTP1.Connector.TcpipInfo’.
 CLASS IRECORD AS ‘Hitachi.OpenTP1.IRecord’.
IDENTIFICATION DIVISION.
METHOD-ID. Execute PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 tcpipInfo USAGE IS OBJECT REFERENCE TCPIPINFO.
01 input USAGE OBJECT REFERENCE IRECORD.
01 output USAGE OBJECT REFERENCE IRECORD.
01 output USAGE IS LOGICAL.
PROCEDURE DIVISION USING BY VALUE tcpipInfo BY VALUE input
                        BY VALUE output RETURNING output.
END METHOD Execute.

パラメタ

tcpipInfo

TCP/IP通信を実行するために必要なさまざまな情報（通信形態，タイムアウト値など）を設定したTcpipInfoオブジェクトを設定します。

input

入力用の情報を格納したIRecordオブジェクトを設定します。

output

出力用の情報を格納したIRecordオブジェクトを設定します。

戻り値

TCP/IP通信に成功した場合はtrueが返されます。

また，同期送受信または一方受信の場合はoutputに受信電文の内容を設定します。

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

次のどれかの場合に発生します。

コネクションがすでに閉じられています。

指定された引数が不正です。

TCP/IP通信の実行に失敗しました。

注意事項

Executeメソッドは，inputに指定された内容を入力電文として，またoutputに指定された内容を出力電文としてTcpipInfoのプロパティ値に従って，TCP/IP通信を実行します。

一方送信の場合，outputの指定は無視されます。

一方受信の場合，inputの指定は無視されます。

一方受信および同期送受信の場合，outputに指定されたIRecordオブジェクトの持つ長さが受信電文サイズと見なされます。受信電文サイズ分を受信するまで，Executeメソッドは呼び出せません。

TcpipInfo

TcpipInfoの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.TcpipInfo

説明

アプリケーションがMHPまたは他システムに対してTCP/IP通信機能を使用するために必要な追加情報をTcpipConnectionに渡すために使用します。COBOL言語からの定数値のフィールドを使用する場合は，「付録B　Connector .NETで利用できるクラスのフィールド」を参照して，対応する値を指定してください。

コンストラクタの一覧

名称 | 説明
TcpipInfo() | TcpipInfoオブジェクトを生成します。

フィールドの一覧

名称 | 説明
TCPIP_RECV | TCP/IP通信の形態として一方受信を指定します。
TCPIP_SEND | TCP/IP通信の形態として一方送信を指定します。
TCPIP_SENDRECV | TCP/IP通信の形態として同期送受信を指定します。

プロパティの一覧

名称 | 説明
Flags | Flagsプロパティは，TCP/IP通信実行時の通信形態を設定および取得します。
WatchTime | WatchTimeプロパティは受信時の最大応答待ち時間を設定および取得します。

コンストラクタの詳細

●TcpipInfo

説明

TcpipInfoオブジェクトを生成します。

宣言

【C#の場合】

public TcpipInfo(
);

【Visual Basicの場合】

Public New( _
)

【J#の場合】

public TcpipInfo(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
AUTO-METHOD. CONSTRUCTOR.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END AUTO-METHOD.

パラメタ

なし

例外

なし

フィールドの詳細

●TCPIP_RECV

説明

TCP/IP通信の形態として一方受信を指定します。

宣言

【C#の場合】

public const int TCPIP_RECV

【Visual Basicの場合】

Public Const TCPIP_RECV As Integer

【J#の場合】

public static final int TCPIP_RECV

●TCPIP_SEND

説明

TCP/IP通信の形態として一方送信を指定します。

宣言

【C#の場合】

public const int TCPIP_SEND

【Visual Basicの場合】

Public Const TCPIP_SEND As Integer

【J#の場合】

public static final int TCPIP_SEND

●TCPIP_SENDRECV

説明

TCP/IP通信の形態として同期送受信を指定します。

宣言

【C#の場合】

public const int TCPIP_SENDRECV

【Visual Basicの場合】

Public Const TCPIP_SENDRECV As Integer

【J#の場合】

public static final int TCPIP_SENDRECV

プロパティの詳細

●Flags

説明

Flagsプロパティは，TCP/IP通信実行時のサービス呼び出し形態を設定および取得します。

宣言

【C#の場合】

public virtual int Flags {get; set;}

【Visual Basicの場合】

Public Overridable Property Flags As Integer

【J#の場合】

public int get_Flags();
public void set_Flags(int);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY Flags IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY Flags IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

指定された値が不正です。または，指定されたフラグの組み合わせが不正です。

●WatchTime

説明

WatchTimeプロパティは受信時の最大応答待ち時間を設定および取得します。

-1から65535（単位：秒）までの範囲で指定します。0を指定した場合は，指定された長さのメッセージを受信するまで無限に待ちます。-1（初期値）を指定した場合は180を適用します。

宣言

【C#の場合】

public virtual int WatchTime {get; set;}

【Visual Basicの場合】

Public Overridable Property WatchTime As Integer

【J#の場合】

public int get_WatchTime();
public void set_WatchTime(int);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY WatchTime IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY WatchTime IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE BINARY-LONG.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

指定された引数が不正です。

-1未満か，または65535を超える値が指定されています。

TP1Connection

TP1Connectionの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.TP1Connection

実装インタフェース

Hitachi.OpenTP1.Connector.ITP1Connection

System.IDisposable

説明

TP1ConnectionクラスはOpenTP1と対話する機能を提供します。

メソッドの一覧

名称 | 説明
Begin() | ローカルトランザクションの開始要求を行います。
Commit() | ローカルトランザクションのコミット要求を行います。
Dispose() | コネクションをコネクションプールに戻します。
Execute(Hitachi.OpenTP1.Connector.RpcInfo, Hitachi.OpenTP1.IRecord, Hitachi.OpenTP1.IRecord) | リモートプロシジャコール（RPC）機能を実行します。
Rollback() | ローカルトランザクションのロールバック要求を行います。

メソッドの詳細

●Begin

説明

ローカルトランザクションの開始要求を行います。

宣言

【C#の場合】

public void Begin(
);

【Visual Basicの場合】

Public Sub Begin( _
)

【J#の場合】

public void Begin(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. Begin PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD Begin.

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

ローカルトランザクションの開始に失敗しました。

または，コネクションがすでに閉じれらています。

●Commit

説明

ローカルトランザクションのコミット要求を行います。

宣言

【C#の場合】

public void Commit(
);

【Visual Basicの場合】

Public Sub Commit( _
)

【J#の場合】

public void Commit(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. Commit PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD Commit.

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

ローカルトランザクションのコミットに失敗しました。

または，コネクションがすでに閉じられています。

●Dispose

説明

コネクションをコネクションプールに戻します。

宣言

【C#の場合】

public sealed virtual void Dispose(
);

【Visual Basicの場合】

Public Overrides NotOverridable Overridable Sub Dispose( _
)

【J#の場合】

public final void Dispose(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. Dispose PUBLIC IS FINAL.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD Dispose.

パラメタ

なし

戻り値

なし

例外

なし

注意事項

コネクションをコネクションプールに戻します。

コネクションをコネクションプールに戻したあと，このオブジェクトに対してさまざまな処理を実行するとTP1ConnectorExceptionがスローされます。

●Execute

説明

リモートプロシジャコール（RPC）機能を実行します。

宣言

【C#の場合】

public System.Boolean Execute(
 Hitachi.OpenTP1.Connector.RpcInfo rpcInfo,
 Hitachi.OpenTP1.IRecord input,
 Hitachi.OpenTP1.IRecord output
);

【Visual Basicの場合】

Public Function Execute( _
 ByVal rpcInfo As Hitachi.OpenTP1.Connector.RpcInfo, _
 ByVal input As Hitachi.OpenTP1.IRecord, _
 ByVal output As Hitachi.OpenTP1.IRecord _
) As System.Boolean

【J#の場合】

public System.Boolean Execute(
 Hitachi.OpenTP1.Connector.RpcInfo rpcInfo,
 Hitachi.OpenTP1.IRecord input,
 Hitachi.OpenTP1.IRecord output
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS RPCINFO AS ‘Hitachi.OpenTP1.Connector.RpcInfo’.
 CLASS IRECORD AS ‘Hitachi.OpenTP1.IRecord’.
IDENTIFICATION DIVISION.
METHOD-ID. Execute PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 rpcInfo USAGE IS OBJECT REFERENCE RPCINFO.
01 input USAGE OBJECT REFERENCE IRECORD.
01 output USAGE OBJECT REFERENCE IRECORD.
01 RESULT USAGE IS LOGICAL.
PROCEDURE DIVISION USING BY VALUE rpcInfo BY VALUE input
                        BY VALUE output RETURNING RESULT.
END METHOD.

パラメタ

rpcInfo

リモートプロシジャコール（RPC）機能を実行するために必要なさまざまな情報（サービスグループ名，サービス名など）を設定したRpcInfoオブジェクトを設定します。

input

入力用の情報を格納したIRecordオブジェクトを設定します。

output

出力用の情報を格納したIRecordオブジェクトを設定します。

戻り値

リモートプロシジャコール（RPC）に成功した場合はtrueが返されます。

また，その場合はoutputにRPC応答電文の内容を設定します。

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

次のどれかの場合に発生します。

コネクションがすでに閉じられています。

指定された引数が不正です。

リモートプロシジャコール（RPC）機能の実行に失敗しました。

注意事項

Executeメソッドは，inputに指定された内容を入力電文として，またoutputに指定された内容を出力電文としてrpcInfoのプロパティ値に従って，リモートプロシジャコール（RPC）機能を実行します。

●Rollback

説明

ローカルトランザクションのロールバック要求を行います。

宣言

【C#の場合】

public void Rollback(
);

【Visual Basicの場合】

Public Sub Rollback( _
)

【J#の場合】

public void Rollback(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. Rollback PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END METHOD Rollback.

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

ローカルトランザクションのロールバックに失敗しました。

または，コネクションがすでに閉じられています。

TP1ConnectionManager

TP1ConnectionManagerの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.TP1ConnectionManager

説明

TP1ConnectionManagerクラスは，OpenTP1との対話に必要なさまざまなオブジェクト（コネクション，レコードなど）を取得する機能を提供します。

コンストラクタの一覧

名称 | 説明
TP1ConnectionManager() | TP1ConnectionManagerクラスのインスタンスを初期化します。
TP1ConnectionManager(System.String) | TP1ConnectionManagerクラスのインスタンスを初期化します。

プロパティの一覧

名称 | 説明
LogWriter | ログの出力先になるTextWriterオブジェクトを設定および取得します。
ProfileID | このオブジェクトに設定されているプロファイルIDを取得します。

メソッドの一覧

名称 | 説明
CreateIndexedRecord(System.String) | リモートプロシジャコール（RPC）機能を実行する場合に，入力電文および出力電文を格納するためのIndexedRecordオブジェクトを取得します。
GetConnection() | OpenTP1にアクセスするためのConnectionオブジェクトを取得します。
GetMessageBuffer(System.Int32) | インデクスドレコードを使用してリモートプロシジャコール（RPC）機能を実行する場合に，利用するバッファをプールから取得します。
GetTcpipConnection() | TCP/IP通信を実行するためのTcpipConnectionオブジェクトを取得します。

コンストラクタの詳細

●TP1ConnectionManager

説明

TP1ConnectionManagerクラスのインスタンスを初期化します。

宣言

【C#の場合】

public TP1ConnectionManager(
);

【Visual Basicの場合】

Public New( _
)

【J#の場合】

public TP1ConnectionManager(
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
AUTO-METHOD. CONSTRUCTOR.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
END AUTO-METHOD.

パラメタ

なし

例外

なし

注意事項

TP1ConnectionManagerクラスのインスタンスを初期化します。

初期化時にこのオブジェクトから生成される各オブジェクトは構成ファイルに記述された<common>要素内の情報を利用します。

構成ファイルの<common>要素内に情報が存在しない場合はデフォルト値を利用します。

●TP1ConnectionManager

説明

TP1ConnectionManagerクラスのインスタンスを初期化します。

宣言

【C#の場合】

public TP1ConnectionManager(
 string profileId
);

【Visual Basicの場合】

Public New( _
 ByVal profileId As String _
)

【J#の場合】

public TP1ConnectionManager(
 System.String profileId
);

【COBOL言語の場合】

IDENTIFICATION DIVISION.
AUTO-METHOD. CONSTRUCTOR.
DATA DIVISION.
LINKAGE SECTION.
01 profileId USAGE STRING.
PROCEDURE DIVISION USING BY VALUE profileId.
END AUTO-METHOD.

パラメタ

profileId

このオブジェクトに割り当てる構成ファイルのプロファイルIDを設定します。

""が設定された場合は<common>要素のプロファイル情報を使用します。

nullが設定された場合は引数を持たないコンストラクタと同様の動作をします。

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

構成ファイルに存在しないプロファイルIDが設定されました。

注意事項

TP1ConnectionManagerクラスのインスタンスを初期化します。

構成ファイルに記述されたプロファイルの<profile>要素内の情報を使用します。

プロファイルIDとして""が設定された場合は<common>要素のプロファイル情報を使用します。

nullが設定された場合は引数を持たないコンストラクタと同様の動作をします。

プロパティの詳細

●LogWriter

説明

ログの出力先になるTextWriterオブジェクトを設定および取得します。

宣言

【C#の場合】

public System.IO.TextWriter LogWriter {get; set;}

【Visual Basicの場合】

Public Property LogWriter As System.IO.TextWriter

【J#の場合】

public System.IO.TextWriter get_LogWriter();
public void set_LogWriter(System.IO.TextWriter);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS TEXTWRITER AS ‘System.IO.TextWriter’.
IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY LogWriter IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE IS OBJECT REFERENCE TEXTWRITER.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

IDENTIFICATION DIVISION.
METHOD-ID. SET PROPERTY LogWriter IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE IS OBJECT REFERENCE TEXTWRITER.
PROCEDURE DIVISION USING BY VALUE VAL.
END METHOD.

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

ログの出力先としてnullが設定されました。

注意事項

このプロパティを設定した場合，Connector .NETは設定されたTextWriterオブジェクトに対してログ出力処理ごとにはFlush処理をしません。そのため，TextWriterオブジェクトの用途やTextWriterオブジェクトの種類に応じて，Flush処理やClose処理を適切に行ってください。

●ProfileID

説明

このオブジェクトに設定されているプロファイルIDを取得します。

宣言

【C#の場合】

public string ProfileID {get;}

【Visual Basicの場合】

Public ReadOnly Property ProfileID As String

【J#の場合】

public System.String get_ProfileID();

【COBOL言語の場合】

IDENTIFICATION DIVISION.
METHOD-ID. GET PROPERTY ProfileID IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 VAL USAGE STRING.
PROCEDURE DIVISION RETURNING VAL.
END METHOD.

例外

なし

メソッドの詳細

●CreateIndexedRecord

説明

リモートプロシジャコール（RPC）機能を実行する場合に，入力電文および出力電文を格納するためのIndexedRecordオブジェクトを取得します。

宣言

【C#の場合】

public Hitachi.OpenTP1.Connector.IndexedRecord
CreateIndexedRecord(
 string recordName
);

【Visual Basicの場合】

Public Function CreateIndexedRecord( _
 ByVal recordName As String _
) As Hitachi.OpenTP1.Connector.IndexedRecord

【J#の場合】

public Hitachi.OpenTP1.Connector.IndexedRecord
CreateIndexedRecord(
 System.String recordName
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS INDEXEDRECORD AS ‘Hitachi.OpenTP1.Connector.IndexedRecord’.
IDENTIFICATION DIVISION.
METHOD-ID. CreateIndexedRecord PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 recordName USAGE IS STRING.
01 RESULT USAGE IS OBJECT REFERENCE INDEXEDRECORD.
PROCEDURE DIVISION USING BY VALUE recordName RETURNING RESULT.
END METHOD CreateIndexedRecord.

パラメタ

recordName

IndexedRecordオブジェクトのレコード名を設定します。

戻り値

指定されたレコード名が設定されたIndexedRecordオブジェクトを返します。

例外

なし

注意事項

リモートプロシジャコール（RPC）機能を実行する場合に，入力電文および出力電文を格納するためのIndexedRecordオブジェクトを取得します。

●GetConnection

説明

OpenTP1にアクセスするためのConnectionオブジェクトを取得します。

コネクションプールに存在している場合は，プールから取り出します。

存在しない場合は，新規にConnectionオブジェクトを生成します。

宣言

【C#の場合】

public Hitachi.OpenTP1.Connector.TP1Connection
GetConnection(
);

【Visual Basicの場合】

Public Function GetConnection( _
) As Hitachi.OpenTP1.Connector.TP1Connection

【J#の場合】

public Hitachi.OpenTP1.Connector.TP1Connection
GetConnection(
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS TP1CONNECTION AS ‘Hitachi.OpenTP1.Connector.TP1Connection’.
IDENTIFICATION DIVISION.
METHOD-ID. GetConnection PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 RESULT USAGE IS OBJECT REFERENCE TP1CONNECTION.
PROCEDURE DIVISION RETURNING RESULT.
END METHOD GetConnection.

パラメタ

なし

戻り値

OpenTP1と対話を行うためのコネクションが返されます。

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

コネクションの取得に失敗しました。

注意事項

取得したTP1Connectionオブジェクトを利用してOpenTP1との対話を行えます。

●GetMessageBuffer

説明

インデクスドレコードを使用してリモートプロシジャコール（RPC）機能を実行する場合に，利用するバッファをプールから取得します。

宣言

【C#の場合】

public Hitachi.OpenTP1.Connector.MessageBuffer
GetMessageBuffer(
 int buffersize
);

【Visual Basicの場合】

Public Function GetMessageBuffer( _
 ByVal buffersize As Integer _
) As Hitachi.OpenTP1.Connector.MessageBuffer

【J#の場合】

public Hitachi.OpenTP1.Connector.MessageBuffer
GetMessageBuffer(
 int buffersize
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS MESSAGEBUFFER AS ‘Hitachi.OpenTP1.Connector.MessageBuffer’.
IDENTIFICATION DIVISION.
METHOD-ID. GetMessageBuffer PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 buffersize USAGE IS BINARY-LONG.
01 RESULT USAGE IS OBJECT REFERENCE MESSAGEBUFFER.
PROCEDURE DIVISION USING BY VALUE buffersize RETURNING RESULT.
END METHOD GetMessageBuffer.

パラメタ

buffersize

利用するバッファのサイズを設定します。

戻り値

設定されたサイズより大きく，かつ最も近いサイズのバッファを返します。

例外

Hitachi.OpenTP1.Connector.TcnIllegalArgumentException

指定されたバッファ長が0以下であるか，または最大長を超えています。

Hitachi.OpenTP1.Connector.TcnNotUsedException

構成ファイルの設定でメッセージバッファの利用が無効です（<buffer>要素のpooling属性がtrueではありません）。

注意事項

インデクスドレコードを使用してリモートプロシジャコール（RPC）機能を実行する場合に，利用するバッファをプールから取得します。

バッファを取得する場合に，バッファのサイズを設定します。

設定されたサイズより大きく，かつ最も近いサイズのバッファを返します。

●GetTcpipConnection

説明

TCP/IP通信を実行するためのTcpipConnectionオブジェクトを取得します。

コネクションプールに存在している場合はプールから取り出します。

存在しない場合は，新規にTcpipConnectionオブジェクトを生成します。

宣言

【C#の場合】

public Hitachi.OpenTP1.Connector.TP1Connection
GetTcpipConnection(
);

【Visual Basicの場合】

Public Function GetTcpipConnection( _
) As Hitachi.OpenTP1.Connector.TP1Connection

【J#の場合】

public Hitachi.OpenTP1.Connector.TP1Connection
GetTcpipConnection(
);

【COBOL言語の場合】

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
 CLASS TCPIPCONNECTION AS ‘Hitachi.OpenTP1.Connector. TcpipConnection’.
IDENTIFICATION DIVISION.
METHOD-ID. GetTcpipConnection PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 RESULT USAGE IS OBJECT REFERENCE TCPIPCONNECTION.
PROCEDURE DIVISION RETURNING RESULT.
END METHOD GetTcpipConnection.

パラメタ

なし

戻り値

TCP/IP通信を実行するためのコネクションが返されます。

例外

Hitachi.OpenTP1.Connector.TP1ConnectorException

コネクションの取得に失敗しました。

注意事項

取得したTcpipConnectionオブジェクトを利用してTCP/IP通信を実行できます。

TP1ConnectorError

TP1ConnectorErrorの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- Hitachi.OpenTP1.Connector.TP1ConnectorError

説明

TP1ConnectorErrorの概要の説明です。COBOL言語からの定数値のフィールドを使用する場合は，「付録B　Connector .NETで利用できるクラスのフィールド」を参照して，対応する値を指定してください。

フィールドの一覧

名称 | 説明
DCCNNER_BEGIN | Beginでの例外です。
DCCNNER_BUF_STAT | バッファの状態が不正です。
DCCNNER_CALL | Callでの例外です。
DCCNNER_CAST | クラスのキャストが不正です。
DCCNNER_COMMIT | Commitでの例外です。
DCCNNER_CONF | 構成ファイルが不正です。
DCCNNER_DISTRIBUTED_TRN | 分散トランザクション処理の例外です。
DCCNNER_INVALID_ARGS | 引数が不正です。
DCCNNER_INVALID_CONN | コネクションが不正です。
DCCNNER_INVALID_CUSTOM_RECORD | カスタムレコードが不正です。
DCCNNER_IOERR | 入出力エラーです。
DCCNNER_NOT_USE_BUF | バッファプーリング機能を利用していない例外です。
DCCNNER_OBJECT_NOT_DEFINED | 電文格納データが不正です。
DCCNNER_OPEN | Openでの例外です。
DCCNNER_PROTO | プロトコルが不正です。
DCCNNER_RECORD_CREATE | カスタムレコード生成時に発生したエラーです。
DCCNNER_RECV | Receiveでの例外です。
DCCNNER_ROLLBACK | Rollbackでの例外です。
DCCNNER_SEND | Sendでの例外です。
DCCNNER_TRN | トランザクション処理の例外です。
DCCNNER_UNMATCH_LENGTH | データ長が不正です。

フィールドの詳細

●DCCNNER_BEGIN

説明

Beginでの例外です。

宣言

【C#の場合】

public const int DCCNNER_BEGIN

【Visual Basicの場合】

Public Const DCCNNER_BEGIN As Integer

【J#の場合】

public static final int DCCNNER_BEGIN

●DCCNNER_BUF_STAT

説明

バッファの状態が不正です。

宣言

【C#の場合】

public const int DCCNNER_BUF_STAT

【Visual Basicの場合】

Public Const DCCNNER_BUF_STAT As Integer

【J#の場合】

public static final int DCCNNER_BUF_STAT

●DCCNNER_CALL

説明

Callでの例外です。

宣言

【C#の場合】

public const int DCCNNER_CALL

【Visual Basicの場合】

Public Const DCCNNER_CALL As Integer

【J#の場合】

public static final int DCCNNER_CALL

●DCCNNER_CAST

説明

クラスのキャストが不正です。

宣言

【C#の場合】

public const int DCCNNER_CAST

【Visual Basicの場合】

Public Const DCCNNER_CAST As Integer

【J#の場合】

public static final int DCCNNER_CAST

●DCCNNER_COMMIT

説明

Commitでの例外です。

宣言

【C#の場合】

public const int DCCNNER_COMMIT

【Visual Basicの場合】

Public Const DCCNNER_COMMIT As Integer

【J#の場合】

public static final int DCCNNER_COMMIT

●DCCNNER_CONF

説明

構成ファイルが不正です。

宣言

【C#の場合】

public const int DCCNNER_CONF

【Visual Basicの場合】

Public Const DCCNNER_CONF As Integer

【J#の場合】

public static final int DCCNNER_CONF

●DCCNNER_INVALID_ARGS

説明

引数が不正です。

宣言

【C#の場合】

public const int DCCNNER_INVALID_ARGS

【Visual Basicの場合】

Public Const DCCNNER_INVALID_ARGS As Integer

【J#の場合】

public static final int DCCNNER_INVALID_ARGS

●DCCNNER_INVALID_CONN

説明

コネクションが不正です。

宣言

【C#の場合】

public const int DCCNNER_INVALID_CONN

【Visual Basicの場合】

Public Const DCCNNER_INVALID_CONN As Integer

【J#の場合】

public static final int DCCNNER_INVALID_CONN

●DCCNNER_DISTRIBUTED_TRN

説明

分散トランザクション処理の例外です。

宣言

【C#の場合】

public const int DCCNNER_DISTRIBUTED_TRN

【Visual Basicの場合】

Public Const DCCNNER_DISTRIBUTED_TRN As Integer

【J#の場合】

public static final int DCCNNER_DISTRIBUTED_TRN

●DCCNNER_INVALID_CUSTOM_RECORD

説明

カスタムレコードが不正です。

宣言

【C#の場合】

public const int DCCNNER_INVALID_CUSTOM_RECORD

【Visual Basicの場合】

Public Const DCCNNER_INVALID_CUSTOM_RECORD As Integer

【J#の場合】

public static final int DCCNNER_INVALID_CUSTOM_RECORD

●DCCNNER_IOERR

説明

入出力エラーです。

宣言

【C#の場合】

public const int DCCNNER_IOERR

【Visual Basicの場合】

Public Const DCCNNER_IOERR As Integer

【J#の場合】

public static final int DCCNNER_IOERR

●DCCNNER_NOT_USE_BUF

説明

バッファプーリング機能を利用していない例外です。

宣言

【C#の場合】

public const int DCCNNER_NOT_USE_BUF

【Visual Basicの場合】

Public Const DCCNNER_NOT_USE_BUF As Integer

【J#の場合】

public static final int DCCNNER_NOT_USE_BUF

●DCCNNER_OBJECT_NOT_DEFINED

説明

電文格納データが不正です。

宣言

【C#の場合】

public const int DCCNNER_OBJECT_NOT_DEFINED

【Visual Basicの場合】

Public Const DCCNNER_OBJECT_NOT_DEFINED As Integer

【J#の場合】

public static final int DCCNNER_OBJECT_NOT_DEFINED

●DCCNNER_OPEN

説明

Openでの例外です。

宣言

【C#の場合】

public const int DCCNNER_OPEN

【Visual Basicの場合】

Public Const DCCNNER_OPEN As Integer

【J#の場合】

public static final int DCCNNER_OPEN

●DCCNNER_PROTO

説明

プロトコルが不正です。

宣言

【C#の場合】

public const int DCCNNER_PROTO

【Visual Basicの場合】

Public Const DCCNNER_PROTO As Integer

【J#の場合】

public static final int DCCNNER_PROTO

●DCCNNER_RECORD_CREATE

説明

カスタムレコード生成時に発生したエラーです。

宣言

【C#の場合】

public const int DCCNNER_RECORD_CREATE

【Visual Basicの場合】

Public Const DCCNNER_RECORD_CREATE As Integer

【J#の場合】

public static final int DCCNNER_RECORD_CREATE

●DCCNNER_RECV

説明

Receiveでの例外です。

宣言

【C#の場合】

public const int DCCNNER_RECV

【Visual Basicの場合】

Public Const DCCNNER_RECV As Integer

【J#の場合】

public static final int DCCNNER_RECV

●DCCNNER_ROLLBACK

説明

Rollbackでの例外です。

宣言

【C#の場合】

public const int DCCNNER_ROLLBACK

【Visual Basicの場合】

Public Const DCCNNER_ROLLBACK As Integer

【J#の場合】

public static final int DCCNNER_ROLLBACK

●DCCNNER_SEND

説明

Sendでの例外です。

宣言

【C#の場合】

public const int DCCNNER_SEND

【Visual Basicの場合】

Public Const DCCNNER_SEND As Integer

【J#の場合】

public static final int DCCNNER_SEND

●DCCNNER_TRN

説明

トランザクション処理の例外です。

宣言

【C#の場合】

public const int DCCNNER_TRN

【Visual Basicの場合】

Public Const DCCNNER_TRN As Integer

【J#の場合】

public static final int DCCNNER_TRN

●DCCNNER_UNMATCH_LENGTH

説明

データ長が不正です。

宣言

【C#の場合】

public const int DCCNNER_UNMATCH_LENGTH

【Visual Basicの場合】

Public Const DCCNNER_UNMATCH_LENGTH As Integer

【J#の場合】

public static final int DCCNNER_UNMATCH_LENGTH

TP1ConnectorException

TP1ConnectorExceptionの概要

名前空間

Hitachi.OpenTP1.Connector

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.Connector.TP1ConnectorException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

Connector .NETで利用されるExceptionクラスのルートとなるExceptionクラスです。

TP1Exceptionを継承します。

TP1IntegrationBehavior

TP1IntegrationBehaviorの概要

名前空間

Hitachi.OpenTP1.ServiceModel.TP1Integration

継承関係

System.Object
 +- Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1IntegrationBehavior

実装インタフェース

System.ServiceModel.Description.IEndpointBehavior

説明

TP1IntegrationBindingのEndpointの設定が正しいかどうかを検証する機能を提供します。

コンストラクタの一覧

名称 | 説明
TP1IntegrationBehavior() | TP1IntegrationBehaviorオブジェクトを生成します。

コンストラクタの詳細

●TP1IntegrationBehavior

説明

TP1IntegrationBehaviorオブジェクトを生成します。

宣言

【C#の場合】

public TP1IntegrationBehavior(
);

【Visual Basicの場合】

Public New( _
)

パラメタ

なし

例外

なし

TP1IntegrationBinding

TP1IntegrationBindingの概要

名前空間

Hitachi.OpenTP1.ServiceModel.TP1Integration

継承関係

System.Object
 +- System.ServiceModel.Channels.Binding
   +- Hitachi.OpenTP1.ServiceModel.TP1Integration.TP1IntegrationBinding

実装インタフェース

System.ServiceModel.IDefaultCommunicationTimeouts

説明

OpenTP1へのサービス要求を実現するBindingを提供します。

コンストラクタの一覧

名称 | 説明
TP1IntegrationBinding() | TP1IntegrationBindingオブジェクトを生成します。

コンストラクタの詳細

●TP1IntegrationBinding

説明

TP1IntegrationBindingオブジェクトを生成します。

宣言

【C#の場合】

public TP1IntegrationBinding(
);

【Visual Basicの場合】

Public New( _
)

パラメタ

なし

例外

なし

TP1RpcClient

TP1RpcClientの概要

名前空間

Hitachi.OpenTP1.ServiceModel.TP1Integration

継承関係

System.Object
 +- System.ServiceModel.ClientBase

実装インタフェース：

System.ServiceModel.ICommunicationObject
System.IDisposable
Hitachi.OpenTP1.ServiceModel.TP1Integration.ITP1Rpc

説明

WCFのクライアントから，TP1IntegrationBindingによるOpenTP1へのサービス要求を可能にする機能を提供するWCFのプロキシクラスです。

コンストラクタの一覧

名称 | 説明
TP1RpcClient() | TP1RpcClientオブジェクトを生成します。
TP1RpcClient(System.String)
TP1RpcClient(System.String, System.String)
TP1RpcClient(System.String, System.ServiceModel.EndpointAddress)
TP1RpcClient(System.ServiceModel.Channels.Binding, System.ServiceModel.EndpointAddress)

メソッドの一覧

名称 | 説明
Call(System.String, System.Byte[], System.Int32, System.Byte[], System.Int32&) | TP1IntegrationBindingによるOpenTP1へのサービス要求を実行します。

コンストラクタの詳細

●TP1RpcClient

説明

TP1RpcClientオブジェクトを生成します。

宣言

【C#の場合】

public TP1RpcClient(
);

【Visual Basicの場合】

Public New( _
)

パラメタ

なし

例外

System.InvalidOperationException

既定<endpoint>要素が存在しないか，複数の<endpoint>要素が存在します。

または，アプリケーション構成ファイルが存在しません。

●TP1RpcClient

説明

TP1RpcClientオブジェクトを生成します。

宣言

【C#の場合】

public TP1RpcClient(string endpointConfigurationName
);

【Visual Basicの場合】

Public New(ByVal endpointConfigurationName As String _
)

パラメタ

endpointConfigurationName

アプリケーション構成ファイルの<endpoint>要素の名称

例外

System.ArgumentException

指定された<endpoint>要素のaddress属性値が不正です。

System.ArgumentNullException

<endpoint>要素の名称にnullが設定されました。

System.InvalidOperationException

指定された<endpoint>要素の名称が見つかりませんでした。

または，コントラクトが不正です。

●TP1RpcClient

説明

TP1RpcClientオブジェクトを生成します。

宣言

【C#の場合】

public TP1RpcClient(
string endpointConfigurationName,
string remoteAddress
);

【Visual Basicの場合】

Public New( _
ByVal endpointConfigurationName As String, _
ByVal remoteAddress As String _
)

パラメタ

endpointConfigurationName

アプリケーション構成ファイルの<endpoint>要素の名称

remoteAddress

接続先のOpenTP1のURI

例外

System.ArgumentNullException

<endpoint>要素の名称にnullが設定されました。

または，接続先のOpenTP1のURIにnullが設定されました。

System.InvalidOperationException

指定された<endpoint>要素の名称が見つかりませんでした。

または，コントラクトが不正です。

System.UriFormatException

指定された接続先のOpenTP1のURIが不正です。

●TP1RpcClient

説明

TP1RpcClientオブジェクトを生成します。

宣言

【C#の場合】

public TP1RpcClient(
string endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress
);

【Visual Basicの場合】

Public New( _
ByVal endpointConfigurationName As String, _
ByVal remoteAddress As System.ServiceModel.EndpointAddress _
)

パラメタ

endpointConfigurationName

アプリケーション構成ファイルの<endpoint>要素の名称

remoteAddress

接続先のOpenTP1の位置情報が設定されたEndpointAddressオブジェクト

例外

System.ArgumentNullException

<endpoint>要素の名称にnullが設定されました。

または，EndpointAddressにnullが設定されました。

System.InvalidOperationException

指定された<endpoint>要素の名称が見つかりませんでした。

または，コントラクトが不正です。

●TP1RpcClient

説明

TP1RpcClientオブジェクトを生成します。

宣言

【C#の場合】

public TP1RpcClient(
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress
);

【Visual Basicの場合】

Public New( _
ByVal binding As System.ServiceModel.Channels.Binding, _
ByVal remoteAddress As System.ServiceModel.EndpointAddress _
)

パラメタ

binding

TP1IntegrationBindingオブジェクト

remoteAddress

接続先のOpenTP1の位置情報が設定されたEndpointAddressオブジェクト

例外

System.ArgumentNullException

TP1IntegrationBindingにnullが設定されました。

または，EndpointAddressにnullが設定されました。

メソッドの詳細

●Call

説明

OpenTP1へのサービス要求を行います。RPCの形態は，同期応答型RPCです。また，トランザクションには参加できません。

宣言

【C#の場合】

public sealed virtual void Call(
string service,
byte[] inData,
int inLength,
ref byte[] outData,
ref int outLength
);

【Visual Basicの場合】

Public Overrides NotOverridable Overridable Sub Call( _
ByVal service As String, _
ByVal inData() As Byte, _
ByVal inLength As Integer, _
ByRef outData() As Byte, _
ByRef outLength As Integer _
)

パラメタ

service

サービス名称

inData

サービスの入力パラメタ

inLength

サービスの入力パラメタ長を指定します。

1から1048576までの範囲が指定できます。ただし，RPC送受信メッセージの最大長拡張機能を使用した場合は，Connector .NET構成定義の<option>要素のmaxMessageSize属性値×1048576までの範囲が指定できます。

outData

サービスの応答の領域を指定します。

outLength

サービスの応答の長さを指定します。

1から1048576までの範囲が指定できます。ただし，RPC送受信メッセージの最大長拡張機能を使用した場合は，Connector .NET構成定義の<option>要素のmaxMessageSize属性値×1048576までの範囲が指定できます。

指定した値は，サービス側で使用する応答領域の長さとして使用されます。

サービス要求終了時，SPP.NETのサービスメソッド，またはSPPのサービス関数で指定した応答の長さがoutLengthに設定されます。

戻り値

なし

例外

System.ServiceModel.CommunicationException

OpenTP1へのサービス要求に失敗しました。

次のどちらかの場合に発生します。

指定された引数が不正です。

リモートプロシジャコール（RPC）機能の実行に失敗しました。

System.ArgumentException

接続先のOpenTP1のURIが不正です。

System.ArgumentNullException

接続先のOpenTP1の情報を格納したオブジェクトが不正です。

System.InvalidOperationException

指定された<endpoint>要素のaddress属性値が不正です。

注意事項

Callメソッドは，指定された引数，およびアプリケーション構成ファイル，またはSystem.ServiceModel.EndpointAddressに設定する接続先のOpenTP1のURIに従って，リモートプロシジャコール（RPC）機能を実行します。

6.　障害運用

この章では，Connector .NETで障害が発生した場合の対処方法について説明します。

＜この章の構成＞

6.1　障害の種類と対処方法

6.2　障害時に取得する情報

6.1　障害の種類と対処方法

Connector .NETで発生するおそれがある障害の種類とユーザが取る処置を次の表に示します。

表6-1　障害の種類とユーザの取る処置

障害の種類
障害の内容
Connector .NETの処理
ユーザが取る処置

通信障害

サーバ障害

ネットワーク障害

など

障害発生時の情報をConnector .NETログファイルに出力します。

例外をUAPに通知します。

障害原因を調査して取り除くか，または障害回復を待ち，再度UAP処理を実行してください。
必要に応じて構成定義の内容，またはTP1/Server側の定義の内容を見直してください。

サーバアプリケーション障害※1
SPP.NETでの例外発生（ユーザ例外）
TP1UserExceptionをUAPに通知します。
SPP.NETの処理，入力データなどを見直してください。

SPP.NETでの例外発生（ユーザ例外以外）
TP1RemoteExceptionをUAPに通知します。
SPP.NETの処理，実行環境などを見直してください。

データ変換障害
クライアントスタブでのデータ変換エラー
TP1MarshalExceptionをUAPに通知します。
使用している.NETインタフェース定義の内容を見直してください。または，サービス定義およびデータ型定義の内容を見直してください。

クライアント環境障害

ファイル障害

メモリ不足

など

障害発生時の情報をConnector .NETログファイルに出力します。※2

例外をUAPに通知します。

障害の要因を取り除いてください。

注※1

サーバアプリケーションが.NETインタフェース定義を使用したSPP.NETの場合にだけ発生します。それ以外の場合は通信障害として通知されます。

注※2

Connector .NETログファイルへの出力で障害が発生した場合は，ファイルへの出力のエラーを無視して処理を続行します。以降，ログは出力されません。

6.2　障害時に取得する情報

障害が発生した場合は，次に示す情報を取得してください。また，必要に応じて，取得した情報をシステム管理者に提供してください。

＜この節の構成＞

(1)　例外が発生した場合

(2)　コマンドがエラーとなった場合

(3)　ログファイルを取得している場合

(1)　例外が発生した場合

例外の情報をToStringメソッドで取得して，ファイルに出力するか画面に表示してください。ログファイルもあわせて取得してください。

(2)　コマンドがエラーとなった場合

コマンドが出力したエラーメッセージ，コマンドの入力形式，入力ファイルなどを保存してください。

(3)　ログファイルを取得している場合

ログファイルを保存してください。

付録

＜この付録の構成＞

付録A　DCCM3と接続する場合の注意事項

付録B　Connector .NETで利用できるクラスのフィールド

付録C　バージョンアップ時の変更点

付録D　用語解説

付録A　DCCM3と接続する場合の注意事項

Connector .NETでは，RPCやTCP/IP通信機能を使用して，VOS3やVOS1上のDCCM3と接続できます。実際の通信は，Connector .NETの前提製品であるClient .NETが行います。通信時の前提条件などについては，マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。

Connector .NETを使用してDCCM3と接続する場合の注意事項を次に示します。

＜この節の構成＞

(1)　RPCを使用する場合

(2)　TCP/IP通信機能を使用する場合

(1)　RPCを使用する場合

リモートAPI機能を使用したRPCだけ使用できます。

連鎖RPCは使用できません。

.NETインタフェース定義を使用したRPCは使用できません。

サービス定義を使用したRPCは，次の条件をすべて満たしている場合だけ使用できます。

データ型定義によってデータの形式をメッセージの単位に定義できる。

文字列を含まないデータ，または.NET Frameworkがサポートしているエンコード方式でエンコードおよびデコードできる文字列のデータを送受信する。
なお，.NET Frameworkがサポートしているエンコード方式については，.NET Frameworkのドキュメントを参照してください。

トランザクション制御機能は使用できません。

文字列のデータを含むメッセージを送受信する場合，あらかじめメッセージ中の文字コードを通信先システムと決めた上で，必要に応じてUAPで文字コード変換を行ってください。.NET Framework上では，Unicode（リトルエンディアン）が文字列データのメモリ上の内部表現として使用されます。

マニュアル「TP1/Client for .NET Framework 使用の手引」の注意事項もあわせて参照してください。

(2)　TCP/IP通信機能を使用する場合

文字列のデータを含むメッセージを送受信する場合，あらかじめメッセージ中の文字コードを通信先システムと決めた上で，必要に応じてUAPで文字コード変換を行ってください。.NET Framework上では，Unicode（リトルエンディアン）が文字列データのメモリ上の内部表現として使用されます。

マニュアル「TP1/Client for .NET Framework 使用の手引」の注意事項もあわせて参照してください。

付録B　Connector .NETで利用できるクラスのフィールド

Connector .NETで利用できる各クラスのフィールドを次の表に示します。COBOL言語から定数値のフィールドを使用する場合は，対応する値を指定してください。

表B-1　Connector .NETで利用できるクラスのフィールド

クラス名 | フィールド名 | 値
Hitachi.OpenTP1.Connector. RpcInfo | DCNOFLAGS | 0
DCRPC_CHAINED | 4
DCRPC_MAX_MESSAGE_SIZE | 1048576
DCRPC_NOREPLY | 1
DCRPC_TPNOTRAN | 32
Hitachi.OpenTP1.Connector. TcpipInfo | TCPIP_RECV | 256
TCPIP_SEND | 128
TCPIP_SENDRECV | 512
Hitachi.OpenTP1.Connector. TP1ConnectorError | DCCNNER_BEGIN | -7751
DCCNNER_BUF_STAT | -7781
DCCNNER_CALL | -7750
DCCNNER_CAST | -7702
DCCNNER_COMMIT | -7752
DCCNNER_CONF | -7707
DCCNNER_DISTRIBUTED_TRN | -7758
DCCNNER_INVALID_ARGS | -7700
DCCNNER_INVALID_CONN | -7701
DCCNNER_INVALID_CUSTOM_RECORD | -7704
DCCNNER_IOERR | -7703
DCCNNER_NOT_USE_BUF | -7780
DCCNNER_OBJECT_NOT_DEFINED | -7705
DCCNNER_OPEN | -7754
DCCNNER_PROTO | -7706
DCCNNER_RECORD_CREATE | -7708
DCCNNER_RECV | -7757
DCCNNER_ROLLBACK | -7753
DCCNNER_SEND | -7756
DCCNNER_TRN | -7755
DCCNNER_UNMATCH_LENGTH | -7709

付録C　バージョンアップ時の変更点

各バージョンでの変更点を次に示す分類ごとに示します。

API，定義およびコマンドの追加と削除

動作の変更

API，定義およびコマンドのデフォルト値の変更

＜この節の構成＞

付録C.1　07-03での変更点

付録C.2　07-02での変更点

付録C.3　07-01での変更点

付録C.4　07-00での変更点

付録C.1　07-03での変更点

Connector .NET 07-03でのAPI，定義およびコマンドの追加と削除はありません。

Connector .NET 07-03での動作の変更点を次の表に示します。

表C-1　Connector .NET 07-03での動作の変更点

分類 | 内容
API | なし
定義 | なし
コマンド | なし
メッセージ | なし
その他 | 適用OSにWindows Server 2008を追加
前提ソフトウェアに，Windows SDK 6.1，およびVisual Studio 2008を追加
開発言語としてCOBOL言語に対応

Connector .NET07-03でのAPI，定義およびコマンドのデフォルト値の変更はありません。

付録C.2　07-02での変更点

Connector .NET 07-02でのAPI，定義およびコマンドの追加と削除を次の表に示します。

表C-2　Connector .NET 07-02でのAPI，定義およびコマンドの追加と削除

種別
分類
内容

追加
API

TP1IntegrationBehaviorクラス

TP1IntegrationBinding クラス

TP1RpcClient クラス

定義
Connector .NET構成定義

<destributedTransaction>要素

<recoveryService>要素

コマンド

cnnnidgenコマンド

cnntrslsコマンド

削除
なし

Connector .NET 07-02での動作の変更点を次の表に示します。

表C-3　Connector .NET07-02での動作の変更点

分類
内容

API
なし

定義
なし

コマンド
なし

メッセージ
次のメッセージを追加

KFCA32471-I

KFCA32472-I

KFCA32473-I

KFCA32474-I

KFCA32476-I

KFCA32477-I

KFCA32478-I

KFCA32479-E

KFCA32480-I

KFCA32481-I

KFCA32482-I

KFCA32483-E

KFCA32484-E

KFCA32485-E

KFCA32486-E

KFCA32487-E

KFCA32428-E

KFCA32429-E

KFCA32430-E

KFCA32495-I

KFCA32496-E

KFCA32497-W

その他
バッファサイズの見積もり方法で，データ型ごとの合計の計算式に代入できる値を追加

char[a]

nt[a]

long[a]

MSDTC連携機能を追加

WCF連携機能を追加

リモートAPI機能でスタティックコネクションスケジュールモードを使用する場合の注意事項を追加

TP1ConnectorErrorクラスに次のフィールドを追加

DCCNNER_DISTRIBUTED_TRN

Connector .NET 07-02でのAPI，定義およびコマンドのデフォルト値の変更はありません。

付録C.3　07-01での変更点

Connector .NET 07-01でのAPI，定義およびコマンドの追加と削除を次の表に示します。

表C-4　Connector .NET 07-01でのAPI，定義およびコマンドの追加と削除

種別
分類
内容

追加
API
なし

定義
Connector .NET構成定義

<connection>要素のfailureInfoSharing属性

<connection>要素のfailureCheckInterval属性

コマンド
なし

削除
なし

Connector .NET 07-01での動作の変更点を次の表に示します。

表C-5　Connector .NET 07-01での動作の変更点

分類
内容

API
なし

定義
なし

コマンド
なし

メッセージ
次のメッセージを追加

KFCA32413-I

KFCA32414-I

KFCA32415-I

KFCA32427-W

その他
適用OSにWindows Vistaを追加

前提ソフトウェアに， .NET Framework v3.0，およびWindows SDK 6.0を追加

接続障害軽減機能を追加

Connector .NET 07-01でのAPI，定義およびコマンドのデフォルト値の変更はありません。

付録C.4　07-00での変更点

Connector .NET 07-00でのAPI，定義およびコマンドの追加と削除を次の表に示します。

表C-6　Connector .NET 07-00でのAPI，定義およびコマンドの追加と削除

種別
分類
内容

追加
API
なし

定義
Connector .NET構成定義

<perfCounter>要素

<option>要素

<connection>要素のthreshold 属性

<connection>要素のwatchtime属性

<log>要素のログレベル3の記述

<common>要素のperfCounter要素の説明，および子要素option

コマンド
if2cstubコマンドに次のオプションを追加

-mオプション

if2tsp，およびspp2tspコマンドに次のオプションを追加

-Bオプション

-Aオプション

削除
API
TP1ConnectorErrorクラス

DCCNNER_BASEフィールド

定義
なし

コマンド
なし

Connector .NET 07-00での動作の変更点を次の表に示します。

表C-7　Connector .NET 07-00での動作の変更点

分類
内容

API
なし

定義
Connector .NET構成定義

<bufferPool>要素のsize属性の範囲を1～1048575に変更

コマンド
なし

メッセージ
ログ出力メッセージの形式を変更

次のメッセージを追加

KFCA32424-W

KFCA32425-W

KFCA32426-W

KFCA32470-E

KFCA32471-I

KFCA32412-I

次のメッセージを変更

KFCA32271-Eに-mオプションを追加

KFCA32440-E

KFCA32441-E

KFCA32426-W

KFCA32275-I

その他
適用OSにWindows Server 2003（64ビット用）を追加

リソース監視機能を追加

セキュリティポリシーの設定

cnnsepf.exeを追加

データ型定義で次の項目を変更

配列指定の配列要素数の範囲を1～8388608に変更

バイナリ型（byte）を追加

RPC送受信メッセージの最大長拡張機能を追加

.NETインタフェース定義のメソッドの引数および戻り値で使用できるデータ型を追加

TP1ユーザ構造体列

TP1ユーザ構造体配列

サービス定義を構成するデータ型定義ファイルに，定義するデータ型にbyte[a]を追加

XMLスキーマ定義方法で，データ型定義から定義されるelement要素にbyte[]を追加

Connector .NET 07-00でのAPI，定義およびコマンドのデフォルト値の変更を次の表に示します。

表C-8　Connector .NET 07-00でのAPI，定義およびコマンドのデフォルト値の変更

分類
内容

API
なし

定義
Connector .NET構成定義

<log>要素のlevelを1に変更

コマンド
なし

その他
なし

付録D　用語解説

記号｜英字｜ア行｜カ行｜サ行｜タ行｜ナ行｜ハ行

Connector .NETに関する用語について説明します。その他の用語については，必要に応じて次のマニュアルおよびドキュメントを参照してください。

「OpenTP1 解説」

「TP1/LiNK 使用の手引」

.NET Frameworkのドキュメント

記号

.NETインタフェース定義

SPP.NETのRPCインタフェース情報を.NET Frameworkに対応したプログラム言語で定義したものです。

英字

ADO.NET

.NET Frameworkが提供するデータアクセスの技術セットです。

ASP.NET

.NET Frameworkが提供するWebアプリケーションやXML Webサービスを構築するための技術セットです。

CLR（Common Language Runtime）

→共通言語ランタイムの説明を参照してください。

CLS（Common Language Specification）

→共通言語仕様の説明を参照してください。

CTS（Common Type System）

→共通型システムの説明を参照してください。

CUP.NET（Client User Program for .NET Framework）

Client .NETを利用して，SPP.NETやSPPにサービスを要求するクライアントアプリケーションのことです。

さまざまなアプリケーション形態が可能であり，アプリケーション形態に応じたランタイムホストで実行されます。

GAC（Global Assembly Cache）

→グローバルアセンブリキャッシュの説明を参照してください。

SPP.NET（Service Providing Program for .NET Framework）

OpenTP1 for .NET FrameworkのUAPのうち，ファイルへのアクセスなどサーバの役割をするプログラムのことです。SPP.NETは，クライアントUAPから要求されたサービスを実行するサービスメソッドから構成されます。

OpenTP1 for .NET Frameworkが提供するランタイムホストで実行されます。

SPP.NET実行コンテナ

Extension .NETが提供するSPP.NET実行用のランタイムホストです。

SUP.NET（Service Using Program for .NET Framework）

OpenTP1 for .NET FrameworkのUAPのうち，SPP.NETまたはSPPに処理要求をするだけの，クライアントアプリケーションのことです。ほかのUAPにサービスを提供するためのメソッドは持ちません。

TSP（TP1 Service Proxy）

TSPは，コネクションを意識しないでOpenTP1のサービスを利用できるプロキシクラスです。

XML Webサービス

XML，HTTP，SOAPなどのインターネット標準技術を利用して，ネットワーク上に分散した異なるプラットフォーム上のアプリケーションを連携させる技術，または連携したアプリケーション（サービス）のことです。

ア行

アセンブリ

.NET Frameworkのアプリケーションの配置やバージョン管理などを行う場合の基本単位です。アセンブリは，リソースやファイルの論理的な集合として，一つの機能を構成します。

アプリケーションドメイン

共通言語ランタイムがアプリケーション間を分離するために使用する処理単位です。

同じアプリケーションの有効範囲内（アプリケーションスコープ）で作成されたオブジェクトの集合の境界を示します。

アプリケーションベースディレクトリ

アプリケーションドメインに読み込まれるDLLファイルまたはEXEファイルを格納するディレクトリのことです。

インデクスドレコード

Connector .NETでバイナリデータを使用した，RPCを発行する場合およびTCP/IP通信をする場合に使用するインタフェースのことです。

カ行

カスタムレコードクラス

データ型定義で定義したデータ型を.NET Frameworkのデータ型に対応づけて生成したデータ変換クラスのことです。

完全限定名

名前空間の名前から指定するオブジェクトの参照方法です。完全限定名を使用すると，使用するオブジェクトを特定できるため，名前の競合が発生しません。

共通型システム（CTS）

共通言語ランタイムでの型の宣言，使用，および管理方法を定義したものです。

共通言語仕様（CLS）

共通言語ランタイムによってサポートされる言語機能のサブセットです。

共通言語ランタイム（CLR）

.NET Frameworkに対応するプログラムが使用する共通の動作環境（ランタイム）です。

クライアントスタブ

→スタブの説明を参照してください。

グローバルアセンブリキャッシュ（GAC）

複数のアプリケーションで共有するアセンブリを格納するコードキャッシュのことです。

コネクション

Connector .NETは，Client .NETが提供するTP1Clientクラスのインスタンスにハンドルを関連づけて管理します。TP1Clientクラスのインスタンスに関連づけられたハンドルのことを，コネクションと呼びます。

コネクションプーリング機能

一度生成されたコネクションをプーリングする機能のことです。コネクションプーリング機能を使用すると，コネクションプール内のコネクションを再利用できるため，資源を効率的に使用できます。

コネクションプール

コネクションプーリング機能使用時に，生成されたコネクションをプーリングするための領域のことです。

サ行

サーバスタブ

→スタブの説明を参照してください。

サービス定義

SPP.NETやSPPのサービス名と入出力データの定義を対応づけて定義したものです。

サービス定義ファイルとデータ型定義ファイルから構成されます。

出力データ用XMLスキーマ

クライアントスタブのサービスメソッドの戻り値（出力データ）であるXML文書の構造が定義されたXMLスキーマのことです。

出力データ用XMLスキーマファイル

出力データ用XMLスキーマが記述されたファイルのことです。

スタブ

.NETインタフェース定義を使用するRPCや，サービス定義を使用するRPCの場合に，RPCで使用する入出力データの文字コード変換やエンディアンの識別などを自動的に行うプログラムのことです。

サーバで使用するスタブをサーバスタブ，クライアントで使用するスタブをクライアントスタブと呼びます。

スタブは運用コマンドで生成します。.NETインタフェース定義を使用するRPCの場合は，クライアントスタブとサーバスタブが生成されます。サービス定義を使用するRPCの場合は，クライアントスタブが生成されます。

タ行

データ型定義

RPCメッセージのユーザデータの形式をC言語の構造体のような形式で定義したものです。

ナ行

名前空間

名前を一意に識別するための概念です。名前空間と名前を組み合わせることによって，オブジェクトなどを特定できます。

また，名前空間によってクラスなどを論理的にグループ化できます。

入力データ用XMLスキーマ

クライアントスタブのサービスメソッドの引数（入力データ）であるXML文書の構造が定義されたXMLスキーマのことです。

入力データ用XMLスキーマファイル

入力データ用XMLスキーマが記述されたファイルのことです。

ハ行

バッファプーリング機能

RPC要求に使用するメッセージを格納するバッファ（バイト配列）をプーリングする機能です。

バッファプーリング機能でバッファをプーリングすると，バッファの生成や破棄が少なくなり性能が向上します。

バッファプール

バッファプーリング機能使用時に，生成されたバッファを同じバッファサイズのバッファごとに管理するプールのことです。

索引

[記号]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｉ][Ｋ][Ｌ][Ｍ][Ｎ][Ｏ][Ｐ][Ｒ][Ｓ][Ｔ][Ｕ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ラ行]

(記号)

.NETインタフェース定義

.NETインタフェース定義〔用語解説〕

.NETインタフェース定義からXMLスキーマへのマッピング

.NETインタフェース定義の定義方法

.NETインタフェース定義を使用したRPC

.NETインタフェース定義を使用したSPP.NETの呼び出し方法

(英字)

(Ａ)

active〔connection〕

ADO.NET〔用語解説〕

appDomainCheckInterval〔recoveryService〕

Append〔MessageBuffer〕 ,[2]

ASP.NET〔用語解説〕

ASP.NET XML Webサービスの動作設定

(Ｂ)

Begin〔TP1Connection〕

buffer

Buffer〔MessageBuffer〕

bufferPool

BufferSize〔MessageBuffer〕

(Ｃ)

Call〔TP1RpcClient〕

client

Client .NET構成定義のプロファイルID〔client〕

CLR〔用語解説〕

CLS〔用語解説〕

cnnnidgen

cnntrsls

COBOL言語で作成する場合の注意事項

Commit〔TP1Connection〕

conf〔client〕

connection

Connector .NETが管理するコネクションプールの最大数〔connection〕

Connector .NETで利用できるクラスのフィールド

Connector .NETログファイル ,[2]

Connector .NETログファイルサイズ〔log〕

Connector .NETログファイル作成ディレクトリ〔log〕

CreateIndexedRecord〔TP1ConnectionManager〕

CTS〔用語解説〕

CUP.NET〔用語解説〕

(Ｄ)

DCCM3と接続する場合の注意事項

DCCNNER_BEGIN〔TP1ConnectorError〕

DCCNNER_BUF_STAT〔TP1ConnectorError〕

DCCNNER_CALL〔TP1ConnectorError〕

DCCNNER_CAST〔TP1ConnectorError〕

DCCNNER_COMMIT〔TP1ConnectorError〕

DCCNNER_CONF〔TP1ConnectorError〕

DCCNNER_DISTRIBUTED_TRN〔TP1ConnectorError〕

DCCNNER_INVALID_ARGS〔TP1ConnectorError〕

DCCNNER_INVALID_CONN〔TP1ConnectorError〕

DCCNNER_INVALID_CUSTOM_RECORD〔TP1ConnectorError〕

DCCNNER_IOERR〔TP1ConnectorError〕

DCCNNER_NOT_USE_BUF〔TP1ConnectorError〕

DCCNNER_OBJECT_NOT_DEFINED〔TP1ConnectorError〕

DCCNNER_OPEN〔TP1ConnectorError〕

DCCNNER_PROTO〔TP1ConnectorError〕

DCCNNER_RECORD_CREATE〔TP1ConnectorError〕

DCCNNER_RECV〔TP1ConnectorError〕

DCCNNER_ROLLBACK〔TP1ConnectorError〕

DCCNNER_SEND〔TP1ConnectorError〕

DCCNNER_TRN〔TP1ConnectorError〕

DCCNNER_UNMATCH_LENGTH〔TP1ConnectorError〕

DCNOFLAGS〔RpcInfo〕

DCRPC_CHAINED〔RpcInfo〕

DCRPC_MAX_MESSAGE_SIZE〔RpcInfo〕

DCRPC_NOREPLY〔RpcInfo〕

DCRPC_TPNOTRAN〔RpcInfo〕

destination〔log〕

Disconnect〔TcpipConnection〕

Dispose〔TcpipConnection〕

Dispose〔TP1Connection〕

distributedTransaction

(Ｅ)

Equals〔IndexedRecord〕

Execute〔TcpipConnection〕

Execute〔TP1Connection〕

(Ｆ)

failureCheckInterval〔connection〕

failureInfoSharing〔connection〕

fileSize〔log〕

Flags〔RpcInfo〕

Flags〔TcpipInfo〕

(Ｇ)

GAC〔用語解説〕

GetConnection〔TP1ConnectionManager〕

GetHashCode〔IndexedRecord〕

GetMessageBuffer〔TP1ConnectionManager〕

GetRecordName〔IndexedRecord〕

GetRecordShortDescription〔IndexedRecord〕

GetTcpipConnection〔TP1ConnectionManager〕

(Ｉ)

id〔profile〕

if2cstub

if2tsp

IndexedRecord

(Ｋ)

keepAlive〔tcpip〕

(Ｌ)

largestBufferPool

level〔log〕

log

LogWriter〔TP1ConnectionManager〕

(Ｍ)

maxCount〔bufferPool〕

maxCount〔largestBufferPool〕

maxMessageSize〔option〕

MessageBuffer

MessageLength〔MessageBuffer〕

MSDTC

MSDTC連携機能

MSDTC連携機能で使用するノード識別子生成コマンド

MSDTC連携機能を使用している場合の障害発生時の運用

MSDTC連携機能を使用するOS環境を一意に識別するためのノード識別子〔distributedTransaction〕

MSDTC連携機能を使用するOS環境を一意に識別するためのノード識別子〔recoveryService〕

MSDTC連携機能を使用するための作業の流れ

MSDTC連携機能を使用する場合のTP1/Serverの設定

MSDTC連携機能を使用する場合の構成定義での指定

(Ｎ)

nodeId〔distributedTransaction〕

nodeId〔recoveryService〕

(Ｏ)

occupation

optimize1PC〔distributedTransaction〕

option

(Ｐ)

perfCounter

pooled〔connection〕

pooled〔occupation〕

pooling〔buffer〕

ProfileID〔TP1ConnectionManager〕

profiles〔recoveryService〕

(Ｒ)

recoverCheckCount〔recoveryService〕

recoverCheckInterval〔recoveryService〕

recoverRetryInterval〔distributedTransaction〕

recoverRetryInterval〔recoveryService〕

recoveryService

ReleaseMessageBuffer〔MessageBuffer〕

rmidStoragePath〔recoveryService〕

RMID格納ディレクトリ〔recoveryService〕

Rollback〔TP1Connection〕

RpcInfo

RpcInfo〔RpcInfo〕

RPC送受信メッセージの最大長拡張機能

RPCデータのXMLマッピング機能

RPCデータのXMLマッピング機能を使用した場合のRPCインタフェースの種類

RPCの形態によるRPCインタフェースの使用可否

RPCメッセージの最大長〔option〕

(Ｓ)

ServiceGroupName〔RpcInfo〕

ServiceName〔RpcInfo〕

SetRecordName〔IndexedRecord〕

SetRecordShortDescription〔IndexedRecord〕

size〔bufferPool〕

SPP.NET〔用語解説〕

SPP.NET実行コンテナ〔用語解説〕

spp2cstub

spp2tsp

SUP.NET〔用語解説〕

System.Transactions名前空間

(Ｔ)

TcnIllegalArgumentException ,[2]

TcnIllegalStateException ,[2]

TcnNotUsedException ,[2]

TCP/IP通信機能

TCP/IP通信機能とバッファプーリング機能を使用する場合のメソッド発行手順

TCP/IP通信機能の使用方法

TCP/IP通信機能を使用する場合のメソッド発行手順

tcpip

TCPIP_RECV〔TcpipInfo〕

TCPIP_SEND〔TcpipInfo〕

TCPIP_SENDRECV〔TcpipInfo〕

TcpipConnection

TcpipInfo

TcpipInfo〔TcpipInfo〕

threshold〔bufferPool〕

threshold〔connection〕

threshold〔largestBufferPool〕

TP1Connection

TP1ConnectionManager

TP1ConnectionManager〔TP1ConnectionManager〕 ,[2]

TP1ConnectorError

TP1ConnectorException ,[2]

TP1Exception

TP1IntegrationBehavior

TP1IntegrationBehavior〔TP1IntegrationBehavior〕

TP1IntegrationBinding ,[2]

TP1IntegrationBinding〔tp1integrationbinding〕

TP1IntegrationBindingのサービスコントラクトおよびプロキシクラス

TP1MarshalException

TP1RemoteException

TP1RpcClient

TP1RpcClient〔TP1RpcClient〕 ,[2] ,[3] ,[4] ,[5]

TP1 Service Proxy〔用語解説〕

TP1UserException

TP1ユーザ構造体

TSP

TSP〔用語解説〕

TSP自動生成機能

TSP自動生成機能の運用

TSP生成コマンド（.NETインタフェース定義用）

TSP生成コマンド（サービス定義用）

TSPの動作設定

(Ｕ)

use〔distributedTransaction〕

use〔perfCounter〕

(Ｗ)

watchtime〔connection〕

WatchTime〔RpcInfo〕

WatchTime〔TcpipInfo〕

WCF

WCFクライアントアプリケーションのコーディング方法

WCF連携機能

WCF連携機能を使用したUAPの開発と実行

(Ｘ)

XML Webサービス〔用語解説〕

XMLスキーマの定義方法〔.NETインタフェース定義を使用した場合〕

XMLスキーマの定義方法〔サービス定義を使用した場合〕

(ア行)

(あ)

アクセス許可

アセンブリ〔用語解説〕

アプリケーション構成ファイルの設定方法

アプリケーションドメイン〔用語解説〕

アプリケーションドメイン監視間隔〔recoveryService〕

アプリケーションプログラムの実行環境

アプリケーションベースディレクトリ〔用語解説〕

(い)

インデクスドレコード〔用語解説〕

インデクスドレコード使用時のバッファの取得と解放

インデクスドレコードを使用したSPP.NETまたはSPPの呼び出し方法

(う)

運用コマンド

運用コマンドの種類

(え)

エラーの判定

(カ行)

(か)

格納されるバッファ数

カスタムレコードクラス〔用語解説〕

カスタムレコードクラスの生成

可変長構造体配列

環境設定

完全限定名〔用語解説〕

(き)

共通型システム〔用語解説〕

共通言語仕様〔用語解説〕

共通言語ランタイム〔用語解説〕

(く)

クライアント環境障害

クライアントスタブ〔用語解説〕

クライアントスタブ使用時のバッファの取得と解放

クライアントスタブ生成コマンド（.NETインタフェース定義用）

クライアントスタブ生成コマンド（サービス定義用）

クライアントスタブの使用方法 ,[2]

クライアントスタブの生成 ,[2]

クラスライブラリを使用する場合の注意事項

グローバルアセンブリキャッシュ〔用語解説〕

(こ)

構成定義

構成ファイルの形式

コネクション

コネクション〔用語解説〕

コネクション取得要求最大応答待ち時間〔connection〕

コネクション数監視時のしきい値〔connection〕

コネクションとトランザクションの関係

コネクションの生成

コネクションのプーリング

コネクションプーリング機能

コネクションプーリング機能〔用語解説〕

コネクションプーリング機能を使用したアプリケーションの実行

コネクションプール

コネクションプール〔用語解説〕

コミット

(サ行)

(さ)

サーバアプリケーション障害

サーバスタブ〔用語解説〕

サービス定義 ,[2]

サービス定義〔用語解説〕

サービス定義（カスタムレコード）を使用したRPC〔RPCデータのXMLマッピング機能を使用した場合〕

サービス定義からXMLスキーマへのマッピング

サービス定義ファイル

サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

最大応答待ち時間の設定方法

最大コネクションプール数

最大サイズのバッファプールに格納されるバッファ数

最大同時使用コネクション数

最大同時使用コネクション数〔connection〕

最大バッファプール内のバッファ数〔largestBufferPool〕

サンプルプログラムの実行手順

サンプルプログラムの使用方法

サンプルプログラムのビルド方法

(し)

出力データ用XMLスキーマ〔用語解説〕

出力データ用XMLスキーマファイル〔用語解説〕

障害時に取得する情報

障害の種類と対処方法

障害発生時のローカルトランザクションの同期点を検証する方法

(す)

スタブ〔用語解説〕

(せ)

セキュリティポリシーの設定

接続先OepnTP1のサービスの位置情報の指定形式

接続障害軽減機能

接続障害の検知の流れ

(タ行)

(た)

単一フェーズコミット最適化

(つ)

通信障害

(て)

ディレクトリ構成

データ型定義

データ型定義〔用語解説〕

データ型定義ファイル

データ変換障害

(と)

トランザクション制御機能 ,[2]

トランザクションの回復処理失敗時の再試行間隔〔distributedTransaction〕

トランザクションの種類

トランザクションのタイムアウトの設定

トランザクションリカバリサービス

トランザクションリカバリサービス回復処理失敗時の再試行間隔〔recoveryService〕

トランザクションリカバリサービス構成定義のプロファイルID〔recoveryService〕

トランザクションリカバリサービスの開始

トランザクションリカバリサービスの状態表示コマンド

(ナ行)

(な)

名前空間〔用語解説〕

(に)

入力データ用XMLスキーマ〔用語解説〕

入力データ用XMLスキーマファイル〔用語解説〕

(の)

ノード識別子の決定

(ハ行)

(は)

バウンダリ調整

バッファサイズ〔bufferPool〕

バッファサイズの見積もり方法

バッファ数監視時のしきい値〔bufferPool〕

バッファ数監視時のしきい値〔largestBufferPool〕

バッファの解放

バッファの取得

バッファプーリング機能

バッファプーリング機能〔用語解説〕

バッファプーリング機能の使用有無

バッファプーリング機能を使用したアプリケーションの実行

バッファプール

バッファプール〔用語解説〕

バッファプールとメッセージバッファ

バッファプール内のバッファ数〔bufferPool〕

パフォーマンスカウンタへのリソース使用状況の出力

(ふ)

プーリングされるバッファのバッファサイズ

復旧確認動作

復旧確認動作間隔〔connection〕

復旧確認動作の流れ

プロファイルID〔profile〕

プロファイルが占有できるコネクションプールの最大数〔occupation〕

プロファイル単位の最大占有コネクション数

分散トランザクション

分散トランザクションのアプリケーションの作成

(マ行)

(み)

未決着トランザクションの完了処理

未決着トランザクションの存在を確認する回数〔recoveryService〕

未決着トランザクションの存在を確認する間隔〔recoveryService〕

(め)

メッセージの一方受信

メッセージの一方送信

メッセージの出力先

メッセージの同期送受信

メッセージバッファ

(ラ行)

(り)

リソース監視機能

リソース不足を通知する警告メッセージの出力

リモートプロシジャコール（RPC）

(れ)

例外の捕捉

(ろ)

ローカルトランザクション

ローカルトランザクションの開始と同期点取得

ロールバック

■ 商標類

Internet Explorerは，米国Microsoft Corporationの米国及びその他の国における登録商標または商標です。
Microsoftは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
MSDNは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
ORACLEは，米国Oracle Corporation の登録商標です。
SOAP（Simple Object Access Protocol）は，分散ネットワーク環境においてXMLベースの情報を交換するための通信プロトコルの名称です。
Visual Basicは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Visual Studioは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windowsは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windows Serverは，米国Microsoft Corporationの米国及びその他の国における登録商標です。
Windows Vistaは，米国Microsoft Corporationの米国及びその他の国における登録商標です。
X/Openは，X/Open Company Limited の英国ならびに他の国における登録商標です。

本書には，X/Openの許諾に基づき X/Open CAE Specification System Interfaces and Headers，Issue4，（C202 ISBN 1-872630-47-2）Copyright（C）July 1992， X/Open Company Limited の内容が含まれています;
なお，その一部は IEEE Std 1003.1-1990，（C）1990 Institute of Electrical and Electronics Engineers，Inc.及び IEEE std 1003.2/D12，（C）1992 Institute of Electrical and Electronics Engineers，Inc.を基にしています。

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，X/Openの許諾に基づき X/Open X/Open Preliminary Specification Distributed Transaction Processing：The TxRPC Specification（P305 ISBN 1-85912-000-8）Copyright（C）July 1993， X/Open Company Limited の内容が含まれています;

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，Open Software Foundation，Inc. が著作権を有する内容が含まれています。
This document and the software described herein are furnished under a license，and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. Title to and ownership of the document and software remain with OSF or its licensors.