<function>
<fname proprety="Applicative Order / LEVEL: 0">
OpenSession
</fname>
<prototype>
LISP形式

(OpenSession)

XML 形式

<OpenSession/>
</prototype>
<prototype>
C関数宣言
</prototype>
<explanation>
セッションを開き、そのセッションIDを返す。 

セッションとは、与えられたいくつかのURL,URIに従って、複数のXLサーバにコネクションし、エージェントを駆動し、データをGetしたりSetしたり、またはその他のコマンドを発行する一連の作業を言う。 

たとえば、URLを与え、そのファイルをGetするためには、まず、URLを分解し、コネクションすべきサーバを特定する。このサーバに接続し、まずは、 GetPrefixModeを発行し、URLの拡張子に対する駆動すべきエージェントを特定する。得られたエージェントをSetAgentによって駆動する。そして、最後にGetを発行しファイルを得る。 

一度駆動されたエージェントはタイムリミットの中で何回も使えるので、Getしたい別のファイルが同じエージェントの条件を備えて入ればこのエージェントへコマンドを送ることによってゲットできる。 

セッション管理はこのようなエージェント共有、タイムアウトで一度切れてしまったコネクションの復活など、煩雑な作業を透明化するものである。 

OpenSessionによって、一つのセッションを開きRemoteSessionによって、いろいろな　URL,URIに接続し、このRemoteSessionに与えたコマンドを対応するエージェントに送り込む。同一セッションで、RemoteSessionはURL,URIを変更して何度も発行できる。最後にCloseSessionでセッションを閉じる。 

同一のサイトの同一のエージェントを示すURL,URIの要求が会った場合は、このエージェントを共有することになる。異なるセッションであっても共有される。
</explanation>
</function>
