2.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メガバイトになります。バッファプーリング機能を使用しない場合は,データ長に制限はありません。