(57)【要約】      （修正有）【課題】同期したレートのクロックを使用して、高信頼メッセージングを実施するための方法、システム、およびコンピュータプログラム製品を提供する。【解決手段】メッセージの多くても１回の送達を保証し送信元および宛先は同期したレートのクロックを使用する。各メッセージには生存時間（ＴＴＬ）値が割り当てられ、ＴＴＬ値に基づく対応するメッセージタイマが終了したとき、送信元では状態情報が更新され、宛先では状態情報が削除される。関連する状態情報が削除された場合は、送信元は状態情報をメッセージ宛先に再送することができる。メッセージ宛先で意図せずにメモリが失われたときは、メッセージプロセッサインスタンスＩＤを用いて多くても１回の送達が保証される。【選択図】  図２
2006094510.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の他のコンピュータシステムとともにネットワークにネットワーク接続可能な宛先コンピュータシステムであって、前記宛先コンピュータシステムと前記他のコンピュータシステムの少なくとも１つとが同期したクロックレートを有する宛先コンピュータシステムにおいて、メッセージを確実に処理する方法であって、
メッセージＩＤおよびＴＴＬ値を有するメッセージの第１のコピーを受信する動作であって、前記メッセージＩＤはメッセージ送信元と前記宛先コンピュータシステムの間のインタラクションにおける前記メッセージの位置を識別し、前記ＴＴＬ値は前記メッセージがいつ期限切れになるかを指示する動作と、
前記メッセージが受信されたことを指示するためにインタラクションキャッシュを更新する動作と、
前記メッセージの前記第１のコピーを処理した後で前記メッセージの第２のコピーを受信する動作であって、前記メッセージの前記第２のコピーは前記メッセージＩＤを有する動作と、
前記メッセージＩＤを有するメッセージが以前に処理されたことを指示する前記インタラクションキャッシュに基づいて前記メッセージの前記第２のコピーを廃棄する動作と
を備えることを特徴とする方法。
【請求項２】
メッセージの第１のコピーを受信する動作は、前記メッセージＩＤ、インタラクションＩＤ、前記ＴＴＬ値、およびアプリケーションデータを含む前記メッセージの第１のコピーを受信する動作を含み、前記インタラクションＩＤは前記メッセージ送信元と前記宛先コンピュータシステムの間の特定のインタラクションを識別し、前記メッセージ送信元および前記宛先コンピュータシステムの前記クロックレートは同期していることを特徴とする請求項１に記載の方法。
【請求項３】
前記メッセージが受信されたことを指示するためにインタラクションキャッシュを更新する前記動作は、前記メッセージＩＤと前記インタラクションＩＤを前記インタラクションキャッシュに格納する動作を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記メッセージを処理した後で、前記メッセージを受信したことの確認応答を前記メッセージ送信元に送信する動作をさらに備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記メッセージの第２のコピーを受信する前記動作は、前記ＴＴＬ値に基づくカウントダウンタイマの期限切れの前に、前記メッセージの前記第２のコピーを受信する動作を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記メッセージの第２のコピーを受信する前記動作は、前記ＴＴＬ値に基づくカウントダウンタイマの期限切れの後で、前記メッセージの前記第２のコピーを受信する動作を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記インタラクションキャッシュに基づいて前記メッセージの前記第２のコピーを廃棄する前記動作は、前記第２のメッセージに含まれる前記メッセージＩＤおよびインタラクションＩＤが前記インタラクションキャッシュに格納されているものであることを判定する動作を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記宛先コンピュータシステムはウェブサーバを含み、前記メッセージ送信元はウェブブラウザであることを特徴とする請求項１に記載の方法。
【請求項９】
暗号化済みのセッションキーを含むトークンを前記メッセージ送信元に送信する動作をさらに備え、前記セッションキーは、公開／秘密キーペアの秘密キーで暗号化され、前記セッションキーは前記メッセージ送信元と前記宛先コンピュータシステムの間の前記インタラクションをセキュアにすることを特徴とする請求項１に記載の方法。
【請求項１０】
前記インタラクションが前記インタラクションキャッシュから削除された後で、前記セキュリティトークンを受信する動作と、
前記トークンを暗号化解除して前記セッションキーを取り出す動作と、
前記インタラクションが前記インタラクションキャッシュから削除済みであったとしても、前記セッションキーを使用して前記インタラクションをセキュアにする動作と
をさらに備えることを特徴とする請求項９に記載の方法。
【請求項１１】
１つまたは複数の他のコンピュータシステムとともにネットワークにネットワーク接続可能な宛先コンピュータシステムであって、前記宛先コンピュータシステムと前記他のコンピュータシステムの少なくとも１つとが同期したクロックレートを有する宛先コンピュータシステムにおいて、メッセージを確実に処理する方法であって、
インタラクションＩＤ、メッセージＩＤ、およびＴＴＬ値を有するメッセージの第１のコピーを受信する動作であって、前記メッセージＩＤは前記インタラクションＩＤによって指定されたインタラクションにおける前記メッセージの位置を識別し、前記ＴＴＬ値は前記メッセージがいつ期限切れになるかを指示する動作と、
前記ＴＴＬ値に基づくカウントダウンタイマの期限切れの後で、少なくとも前記メッセージＩＤをインタラクションキャッシュから削除する動作と、
前記メッセージＩＤを前記インタラクションキャッシュから削除した後で、前記メッセージの第２のコピーを受信する動作と、
前記インタラクションＩＤの進捗についての指示を求める要求をメッセージ送信元に送信する動作であって、前記メッセージ送信元は前記宛先コンピュータシステムのクロックレートと同期したクロックレートを有する動作と、
前記メッセージＩＤを有するメッセージを廃棄できる段階に前記インタラクションが進んだという指示を受信する動作と、
前記メッセージの前記第２のコピーを廃棄する動作と
を備えることを特徴とする方法。
【請求項１２】
前記メッセージ送信元から前記メッセージの前記第１のコピーを受信する動作であって、前記メッセージの前記第１のコピーはアプリケーションデータを含む動作と、
前記アプリケーションデータを対応するメッセージプロセッサインスタンスに送達する動作と
をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記インタラクションキャッシュから前記メッセージＩＤを削除する前に、前記インタラクションキャッシュを更新して前記メッセージが受信されたことを指示する動作をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１４】
インタラクションキャッシュから少なくとも前記メッセージＩＤを削除する前記動作は、前記インタラクションへの参加を終了することなく、前記インタラクションＩＤによって指定された前記インタラクションの前記進捗を無視する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項１５】
前記メッセージを処理した後で、前記メッセージを受信したという確認応答を前記メッセージ送信元に送信する動作をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１６】
前記インタラクションキャッシュから前記メッセージＩＤを削除する前記動作は、前記インタラクションＩＤによって識別される前記インタラクションが、指定された期間アイドル状態であったことを検出する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項１７】
前記インタラクションキャッシュから前記メッセージＩＤを削除する前記動作は、前記インタラクションＩＤによって指定される前記全体のインタラクションを削除する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項１８】
前記メッセージの前記第２のコピーを受信した後で、前記メッセージの前記第２のコピーに含まれる前記インタラクションＩＤによって識別される前記インタラクションに関するメッセージＩＤが前記インタラクションキャッシュに含まれていないことを検出する動作をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１９】
前記インタラクションＩＤの前記進捗についての指示を求める要求を前記メッセージ送信元に送信する前記動作は、ＲＥＱＡＣＫＡＣＫを送信する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項２０】
ＲＥＱＡＣＫＡＣＫを送信する前記動作は、１つまたは複数の前記インタラクションＩＤおよび１つのインスタンスＩＤを含むＲＥＱＡＣＫＡＣＫを送信する動作を含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記メッセージＩＤを有するメッセージを廃棄できる段階に前記インタラクションが進んだという指示を受信する前記動作は、前記メッセージＩＤおよび前記インタラクションＩＤを含むＡＣＫＡＣＫを前記メッセージ送信元から受信する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項２２】
前記メッセージＩＤを有するメッセージを廃棄できる段階に前記インタラクションが進んだという指示を受信する前記動作は、１つまたは複数の追加のメッセージＩＤがメッセージ送信元でタイムアウトし、もはや確認応答を必要としなくなったこともまた指示するＡＣＫＡＣＫを受信する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項２３】
前記メッセージＩＤを有するメッセージを廃棄できる段階に前記インタラクションが進んだという指示を受信する前記動作は、前記インタラクションの前記進捗が以前に前記インタラクションキャッシュから削除済みであったとしても前記宛先コンピュータシステムが前記インタラクションに参加できるように、前記インタラクションに関連する前記進捗情報を受信する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項２４】
前記メッセージＩＤを有するメッセージを廃棄できる段階に前記インタラクションが進んだという指示を受信する前記動作は、前記メッセージＩＤ、インタラクションＩＤ、およびセキュリティトークンを含むＡＣＫＡＣＫを受信する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項２５】
前記メッセージの前記第２のコピーを廃棄する前記動作は、前記第２のメッセージに含まれる前記メッセージＩＤおよびインタラクションＩＤが前記ＡＣＫＡＣＫ中の前記メッセージＩＤおよびインタラクションＩＤと一致することを判定する動作を含むことを特徴とする請求項１１に記載の方法。
【請求項２６】
前記宛先コンピュータシステムはウェブサーバを含み、前記メッセージ送信元はウェブブラウザであることを特徴とする請求項１１に記載の方法。
【請求項２７】
１つまたは複数の他のコンピュータシステムとともにネットワークにネットワーク接続可能な宛先コンピュータシステムにおいて、メッセージを確実に処理する方法であって、
メッセージ送信元からメッセージの第１のコピーを受信する動作であって、前記メッセージの前記第１のコピーは確立されたインスタンスＩＤと関係付けられている動作と、
前記確立されたインスタンスＩＤを持つように初期化されたメッセージプロセッサインスタンスにおいて前記メッセージの前記第１のコピーを処理する動作と、
前記宛先コンピュータシステムによって使用されるメモリの内容が意図せずに失われたことを検出する動作と、
前記確立されたインスタンスＩＤとは異なる、更新されたインスタンスＩＤを持つように前記メッセージプロセッサインスタンスを再初期化する動作と、
前記メッセージプロセッサインスタンスを再初期化した後で前記メッセージの第２のコピーを受信する動作であって、前記メッセージの前記第２のコピーは前記確立されたインスタンスＩＤと関係付けられている動作と、
前記メッセージの前記第２のコピーは前記更新されたインスタンスＩＤと異なるインスタンスＩＤに対応しているので、前記メッセージの前記第２のコピーを拒否する動作と
を備えることを特徴とする方法。
【請求項２８】
メッセージの第１のコピーを受信する前記動作は、前記確立されたインスタンスＩＤを含むメッセージの第１のコピーを受信する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項２９】
メッセージの第１のコピーを受信する前記動作は、
前記メッセージの前記第１のコピーを受信する動作と、
ＲＥＱＡＣＫＡＣＫを前記メッセージ送信元に送信する動作と、
前記確立されたインスタンスＩＤを含むＡＣＫＡＣＫを受信する動作と
を含むことを特徴とする請求項２７に記載の方法。
【請求項３０】
メッセージプロセッサにおいて前記メッセージの前記第１のコピーを処理する前記動作は、前記第１のメッセージに関係する前記確立されたインスタンスＩＤが前記メッセージプロセッサインスタンスの現在のインスタンスＩＤであることを判定する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項３１】
メッセージプロセッサにおいて前記メッセージの前記第１のコピーを処理する前記動作は、前記メッセージに含まれるアプリケーションデータを前記メッセージプロセッサインスタンスに送達する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項３２】
前記宛先コンピュータシステムによって使用されるメモリの内容が意図せずに失われたことを検出する前記動作は、インタラクションキャッシュの内容が失われたことを検出する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項３３】
更新されたインスタンスＩＤを持つように前記メッセージプロセッサインスタンスを再初期化する前記動作は、更新されたインスタンスＩＤを生成する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項３４】
前記メッセージの第２のコピーを受信する前記動作は、前記確立されたインスタンスＩＤを含む前記メッセージの第２のコピーを受信する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項３５】
前記メッセージの第２のコピーを受信する前記動作は、
前記メッセージの前記第２のコピーを受信する動作と、
ＲＥＱＡＣＫＡＣＫを前記メッセージ送信元に送信する動作と、
前記確立されたインスタンスＩＤを含むＡＣＫＡＣＫを受信する動作と
を含むことを特徴とする請求項２７に記載の方法。
【請求項３６】
前記メッセージの前記第２のコピーを拒否する前記動作は、前記確立されたインスタンスＩＤと前記更新されたインスタンスＩＤとが異なることを判定する動作を含むことを特徴とする請求項２７に記載の方法。
【請求項３７】
前記メッセージ中のインタラクションＩＤによって識別されたインタラクションに失敗する動作をさらに備えることを特徴とする請求項２７に記載の方法。
【請求項３８】
前記宛先コンピュータシステムはウェブサーバを含み、前記メッセージ送信元はウェブブラウザであることを特徴とする請求項２７に記載の方法。
【請求項３９】
１つまたは複数の他のコンピュータシステムとともにネットワークにネットワーク接続可能な送信元コンピュータシステムであって、前記送信元コンピュータシステムと前記他のコンピュータシステムの少なくとも１つとが同期したクロックレートを有する送信元コンピュータシステムにおいて、メッセージを確実に処理する方法であって、
インタラクションＩＤ、メッセージＩＤ、およびＴＴＬ値を有するメッセージの第１のコピーを、前記送信元コンピュータシステムの前記クロックレートと同期したクロックレートを有するメッセージ宛先に送信する動作であって、前記メッセージＩＤは前記インタラクションＩＤによって指定されたインタラクションにおける前記メッセージの位置を識別し、前記ＴＴＬ値は前記メッセージがいつ有効期限切れになるかを指示する動作と、
前記メッセージの前記第１のコピーを送信した後で、前記メッセージの第２のコピーを前記メッセージ宛先に送信する動作であって、前記メッセージの前記第２のコピーは前記インタラクションＩＤ、前記メッセージＩＤ、および更新されたＴＴＬ値を有し、前記更新されたＴＴＬ値は、前記ＴＴＬ値および前記メッセージの前記第１のコピーが送信された後の経過時間から計算される動作と、
前記メッセージがもはや確認応答を必要としないことを検出する動作と、
前記メッセージがもはや確認応答を必要としないことを指示するためにインタラクションキャッシュを更新する動作とを備えることを特徴とする方法。
【請求項４０】
前記ＴＴＬ値に基づくメッセージタイマ継続時間を設定する動作をさらに備えることを特徴とする請求項３９に記載の方法。
【請求項４１】
前記メッセージの第２のコピーを送信する前記動作は、前記メッセージの前記第２のコピーを再送間隔で送信する動作を含むことを特徴とする請求項３９に記載の方法。
【請求項４２】
前記メッセージの前記第２のコピーを送信した後で、前記メッセージの少なくとも１つの追加のコピーを送信する動作をさらに備える、前記メッセージの各追加のコピーは前記インタラクションＩＤ、前記メッセージＩＤ、および対応するＴＴＬ値を含み、各対応するＴＴＬ値は直前の対応するＴＴＬ値と前記メッセージの直前のコピーが送信されてからの経過時間とから計算されることを特徴とする請求項３９に記載の方法。
【請求項４３】
前記メッセージがもはや確認応答を必要としないことを検出する前記動作は、前記メッセージ宛先から前記メッセージの確認応答を受信する動作を含むことを特徴とする請求項３９に記載の方法。
【請求項４４】
前記メッセージがもはや確認応答を必要としないことを検出する前記動作は、前記ＴＴＬ値に基づくメッセージタイマ継続時間が終了したことを検出する動作を含むことを特徴とする請求項３９に記載の方法。
【請求項４５】
前記メッセージがもはや確認応答を必要としないことを指示するためにインタラクションキャッシュを更新する動作は、前記メッセージＩＤとインタラクションＩＤを前記インタラクションキャッシュに格納する動作を含むことを特徴とする請求項３９に記載の方法。
【請求項４６】
ＲＥＱＡＣＫＡＣＫを前記メッセージ宛先から受信する動作であって、前記ＲＥＱＡＣＫＡＣＫは前記インタラクションＩＤによって識別される前記インタラクションの進捗を要求する動作と、
前記メッセージが確認応答を必要としないことを前記メッセージ宛先に知らせるために、前記メッセージＩＤによって識別される前記メッセージまで前記インタラクションが進んだことを指示するＡＣＫＡＣＫを送信する動作と
をさらに備えることを特徴とする請求項３９に記載の方法。
【請求項４７】
前記送信元コンピュータシステムはウェブブラウザを含み、前記メッセージ宛先はウェブサーバであることを特徴とする請求項３９に記載の方法。
【請求項４８】
前記メッセージに対する確認応答をまったく受信していなかったとしても、前記メッセージがもはや確認応答を必要としないことを指示するＡＣＫＡＣＫを送信する動作をさらに備えることを特徴とする請求項３９に記載の方法。
【請求項４９】
メッセージ宛先からトークンを受信する動作であって、前記トークンは公開／秘密キーペアの秘密キーで暗号化された暗号化済みのセッションキーを含み、前記セッションキーは前記メッセージ宛先と前記送信元コンピュータシステムの間の前記インタラクションをセキュアにする動作と、
前記公開／秘密キーペアの前記公開キーを用いて前記トークンを暗号化解除して前記セッションキーを取り出す動作と、
前記取り出したセッションキーを使用して、前記メッセージ宛先に送信される後続の通信をセキュアにする動作と
をさらに備えることを特徴とする請求項３９に記載の方法。
【請求項５０】
前記メッセージ宛先が前記送信元コンピュータシステムとのセキュアな関係を再確立できるようにするために、ＲＥＱＡＣＫＡＣＫに応答して、前記受信したトークンを続いて前記メッセージ宛先に送信する動作をさらに備えることを特徴とする請求項４９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は電子メッセージングに関し、より詳細には速度を同期させたクロックを使用した高信頼メッセージングに関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連技術は、社会の多くの面に影響を与えている。実際、コンピュータシステムの情報処理能力を用いることにより、我々の生活および仕事の様式が変化してきた。今日、コンピュータシステムは一般に、コンピュータシステムの出現以前には手動で実施されていた多くの仕事（例えば、ワードプロセッシング、スケジューリング、データベース管理など）を実施する。最近になって、コンピュータシステムは相互に、および他の電子装置と結合され、コンピュータシステムや他の電子装置が電子データを転送できる有線および無線のコンピュータネットワークを形成するようになった。その結果、コンピュータシステムで実施される多くの仕事（例えば、音声通信、電子メールへのアクセス、ホームエレクトロニクスの制御、ウェブ閲覧、文書印刷など）には、有線および／または無線のコンピュータネットワークを介した、多くのコンピュータシステムおよび／または他の電子装置との間の電子メッセージの交換が含まれるようになった。
【０００３】
ネットワークは実際に急速に拡大したため、単純なネットワーク対応のコンピュータシステムが、「インターネット」と呼ばれることも多い、ネットワークの集合体を介して地球の至る所に広がった何百万もの他のコンピュータシステムの任意の１台と通信できるようになった。このようなコンピュータシステムには、デスクトップ、ラップトップ、もしくはタブレット型のパーソナルコンピュータ、ＰＤＡｓ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）、電話機、またはデジタルネットワークを介して通信できる他の任意のコンピュータもしくは装置が含まれる。
【０００４】
ネットワークを介して通信するためには、あるコンピュータシステム（本明細書では「送信側コンピュータシステム」と呼ぶ）は、電子メッセージを作成し、または電子メッセージにアクセスし、次いでその電子メッセージを、ネットワークを介して他のコンピュータシステム（本明細書では「受信側コンピュータシステム」と呼ぶ）に送信する。電子メッセージが電子メールまたはインスタントメッセージのときは、その電子メッセージは人間であるユーザが読むことができる。あるいは、代わって受信側コンピュータシステム上で動作するアプリケーションで読むことができる。電子メッセージは、人間であるユーザの可能な支援を受けながら、送信側コンピュータシステム上で動作するアプリケーションによって作成することができる。
【０００５】
この様な電子メッセージングは、コンピュータシステムが情報を交換することを可能にするので有利であるが、ネットワークは、電子メッセージを送達し損なうこともある。電子メッセージの重要度にもよるが、このことはかなりの害を及ぼす可能性があり、場合によっては壊滅的な影響も与え得る。したがって、これまでにいくつかの高信頼電子メッセージング技術が開発されてきた。
【０００６】
一般に、信頼できるメッセージング技術の目的は、メッセージを送信し（ｌｏｏｓｅ）、複製し、並べ替え、遅延させ得る通信ネットワークを介して、電子メッセージを送信元から宛先まで送達することである。複数回送達され処理されても無害の電子メッセージもある。しかし、そのことは、すべてのメッセージにあてはまる訳ではない。一般に、最も安全な方法は、メッセージが１回だけ送達されるか、またはまったく送信されないことを保証することである。
【０００７】
いくつかの高信頼メッセージング技術は、確認応答メッセージを実装する。例えば、（伝送プロトコルのうちで）伝送制御プロトコルは、確認応答ベースの高信頼メッセージングを実装する。詳細には、受信側コンピュータシステムが送信側コンピュータシステムから電子メッセージを受信したとき、受信側コンピュータシステムは送信側コンピュータシステムに確認応答メッセージを送信する。確認応答メッセージを受信したとき、送信側コンピュータシステムは、受信側コンピュータシステムが実際に電子メッセージを受信したという知識が与えられると、確実に適切なアクションを取ることができる。一方、送信側コンピュータシステムが確認応答メッセージを受信しなかった場合には、送信側コンピュータシステムは、電子メッセージを再送するなど適切なアクションを取ることができる。しかし、受信した各電子メッセージごとに確認応答メッセージを送信することにより、多数の確認応答メッセージが生じる可能性があり、不必要にネットワーク帯域幅を消費することになりかねない。
【０００８】
送信しなければならない確認応答メッセージの数を減らすために、累積確認応答（ｃｕｍｕｌａｔｉｖｅ  ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）が開発された。累積確認応答では、送信側コンピュータシステムは、セッションの各電子メッセージにシーケンス番号を割り当てる。一般に、所与の電子メッセージのシーケンス番号は、そのセッションの直前の電子メッセージに対して１ずつ増加する。送信元コンピュータシステムに返される累積確認応答には、正常に受信されたメッセージを表す一連のシーケンス番号の最後のシーケンス番号が含まれる。例えば、受信側コンピュータシステムが、シーケンス番号１〜５０および５５〜９９を有する電子メッセージは受信したが、シーケンス番号５１〜５４を有するメッセージは受信していないと想定する。受信側コンピュータシステムは、受信したシーケンスだけを識別する累積確認応答を返すことができる。
【０００９】
しかし、送信側コンピュータシステムが、（個別または累積の）確認応答メッセージを受信できなかった場合には、送信側コンピュータシステムは、電子メッセージの送達に失敗したのか、または対応する確認応答メッセージの送達に失敗したのかが判断できないこともある。すなわち、送信側コンピュータシステムは、受信側コンピュータシステムが電子メッセージを受信したかどうかに関して「不確定」になる。環境によっては、電子メッセージを複数回送達し処理することが許されることもある。したがって、このような環境（例えば、静的なウェブベースのコンテンツを含む環境）では、送信側コンピュータシステムは、対応する確認応答メッセージが受信されないときに電子メッセージを再送することができる。しかし、他の環境では、電子メッセージを複数回送達し、かつ／または処理することが許されないこともある。したがって、このような他の環境（例えば、銀行取引など）においては、送信側コンピュータシステムは、対応する確認応答メッセージが受信されないときに電子メッセージを再送しないことになる。
【００１０】
送信側コンピュータシステムを、誤りの可能性がある再送を決定しなければならないことから開放するために、重複検出機構（ｄｕｐｌｉｃａｔｅ  ｄｅｔｅｃｔｉｏｎ  ｍｅｃｈａｎｉｓｍ）が設計された。重複検出機構は、受信側コンピュータシステムが同一のメッセージ（または一連のメッセージ）を２度以上処理する可能性を減少させる。重複検出機構を実施するために、多くの受信側コンピュータシステムは送信側コンピュータシステムに関連する状態情報を格納する。例えば、受信側コンピュータシステムは、これまでに処理されたすべての過去のメッセージ（または一連のメッセージ）の（例えば、送信側コンピュータシステムのＩＰアドレス、およびシーケンス番号によって識別される）指示を（例えば、データベースまたはリストに）格納することができる。したがって、受信されたメッセージがリストに存在する（すなわち、そのメッセージが以前に受信されたものである）場合は、受信されたメッセージは廃棄され、メッセージの再処理が回避される。受信側コンピュータシステムは一般に、例えば、セッション期間など長期間にわたる（可能性としては永遠の）状態情報を格納して、重複検出の可能性を大幅に増大させる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
コンピュータシステムの数およびネットワーク上（例えば、インターネット上）で交換されるメッセージの数によるが、重複検出を実施するために必要なリソースは、かなり大きなものになる可能性がある。例えば、インターネット上では、常に何百万ものコンピュータシステムが電子メッセージを交換している。単一の受信側コンピュータシステム（例えば、小売業者用サーバ）が、所与の日に数千あるいは数万もの様々な送信側コンピュータシステムとインタラクションすることさえ珍しくはない。したがって、重複検出を実施するためには、これらの受信側コンピュータシステムは、長期間にわたり、あらゆる送信側コンピュータシステムから受信したあらゆるメッセージの指示を格納することになる。各送信側コンピュータシステムは、場合によっては、トランザクションの一部として数千のメッセージを送信することがあるので、受信側コンピュータシステムは、大量の（例えば、数百万または数千万の）メッセージに関する状態を保持することが必要になる場合がある。
【００１２】
他のいくつかの高信頼メッセージング技術では、絶対時間に同期したクロックを使用している。しかし、クロックを絶対時間に同期させるには同期プロトコルと高い接続性が必要になる。例えば、インターネットなどいくつかのネットワークにおいては、各コンピュータシステムがネットワークへの接続と切断を頻繁に繰り返すので、高い接続性は実質的に不可能になる。さらに、絶対時間同期のクロックを使用する高信頼メッセージング技術は、実行のためにより多くの費用がかかる可能性がある。したがって、絶対クロック同期という、より厳密な動作パラメータへの適合が不可能なときには、状態保持による高信頼メッセージング技術が頻繁に使用され必要とされる。したがって、多くのネットワーク化されたコンピュータシステムでは、他のコンピュータシステムとの通信に関する状態を保持するために、場合によってはかなりのリソースを割り振ることが必要になる。したがって、よりリソースを消費しない形で高信頼メッセージングを容易にするシステム、方法、およびコンピュータプログラム製品があれば有利であろう。
【課題を解決するための手段】
【００１３】
従来技術に関する前述の問題は、同期レートのクロックを使用する高信頼メッセージングのための方法、システム、およびコンピュータプログラム製品を対象とする本発明の原理によって克服される。いくつかの実施形態において、メッセージ宛先は、メッセージＩＤと生存時間（「ＴＴＬ」）値を含むメッセージの第１のコピーを処理する。メッセージ宛先は、インタラクションキャッシュ（ｉｎｔｅｒａｃｔｉｏｎ  ｃａｃｈｅ）を更新して、そのメッセージＩＤを含むメッセージが処理されたことを指示する。メッセージの第１のコピーを処理した後で、メッセージ宛先は、ＴＴＬ値に基づくカウントダウンタイマの終了の前に、（やはり、同じメッセージＩＤを含む）メッセージの第２のコピーを受信する。メッセージ宛先は、そのメッセージＩＤを含むメッセージが以前に処理されたことを指示するインタラクションキャッシュに基づいて、メッセージの第２のコピーを拒否する。
【００１４】
他の実施形態においては、メッセージ宛先は、インタラクションＩＤ、メッセージＩＤ、およびＴＴＬ値を含むメッセージの第１のコピーを処理する。メッセージ宛先は、処理されたメッセージに指定されたＴＴＬ値に基づく最後のカウントダウンタイマの期間終了に応答して、インタラクションキャッシュから、そのインタラクションＩＤに関する進捗情報を削除する。カウントダウンタイマの期間終了の後で、メッセージ宛先は、メッセージの第２のコピーを受信する。メッセージ宛先は、そのインタラクションＩＤの進捗の指示を求める要求を、メッセージ宛先のクロックレートに同期したクロックレートを有する、対応するメッセージ送信元に送信する。メッセージ宛先は、そのメッセージＩＤを含むメッセージを廃棄することができる段階にインタラクションが進んだという指示を受信する。メッセージ宛先は、メッセージの第２のコピーを廃棄する。
【００１５】
他の実施形態においては、メッセージ宛先は、前のインスタンスＩＤに対応するメッセージの第１のコピーを受信する。その後で、メッセージ宛先は、前のインスタンスＩＤを含むように初期化されたメッセージプロセッサインスタンスで、メッセージの第１のコピーを処理する。メッセージ宛先は、その宛先コンピュータシステムによって使用されるメモリの内容が意図せずに失われたことを検出する。メッセージ宛先は、前のインスタンスＩＤとは異なる、更新されたインスタンスＩＤを含むようにメッセージプロセッサインスタンスを再初期化する。メッセージプロセッサインスタンスを再初期化した後で、メッセージ宛先は、前のインスタンスＩＤに対応するメッセージの第２のコピーを受信する。メッセージ宛先は、そのメッセージの第２のコピーが、更新されたインスタンスＩＤとは異なるインスタンスＩＤに対応しているので、メッセージの第２のコピーを拒否する。
【００１６】
他の実施形態においては、メッセージ送信元は、インタラクションＩＤ、メッセージＩＤ、およびＴＴＬ値を含むメッセージの第１のコピーを、メッセージ送信元のクロックレートに同期したクロックレートを有するメッセージ宛先に送信する。メッセージの第１のコピーを送信した後で、メッセージ送信元は、インタラクションＩＤ、メッセージＩＤ、および更新されたＴＴＬ値を含むメッセージの第２のコピーを宛先コンピュータシステムに送信する。更新されたＴＴＬ値は、メッセージの第１のコピーに指定されたＴＴＬ値から、メッセージの第１のコピーが送信された後の経過時間を減算することによって計算される。メッセージ送信元は、メッセージのＴＴＬが期間終了したことを検出する。メッセージ送信元はインタラクションキャッシュを更新して、そのメッセージがもはや確認応答を必要としないことを指示する。
【００１７】
本発明のこれらおよび他の目的と特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかになるはずであり、また以下で説明する本発明の実施によって理解できるはずである。
【００１８】
本発明の上記および他の利点および特徴をより明確にするために、本発明のより詳細な説明は、添付の図面に示された本発明の詳細な実施形態を参照しながら示される。これらの図面が、本発明の代表的な実施形態を示したものにすぎないこと、したがって本発明の範囲を限定するものと見なすべきではないことを理解されたい。本発明は、添付の図面を使用することにより、さらに具体的かつ詳細に記述され説明される。
【発明を実施するための最良の形態】
【００１９】
従来技術に関する前述の問題は、同期レートのクロックを使用する高信頼メッセージングのための方法、システム、およびコンピュータプログラム製品を対象とする本発明の原理によって克服される。いくつかの実施形態において、メッセージ宛先は、メッセージＩＤと生存時間（「ＴＴＬ」）値を含むメッセージの第１のコピーを処理する。メッセージ宛先は、インタラクションキャッシュを更新して、そのメッセージＩＤを含むメッセージが処理されたことを指示する。メッセージの第１のコピーを処理した後で、メッセージ宛先は、ＴＴＬ値に基づくカウントダウンタイマの終了の前に、（やはり、同じメッセージＩＤを含む）メッセージの第２のコピーを受信する。メッセージ宛先は、そのメッセージＩＤを含むメッセージが以前に処理されたことを指示するインタラクションキャッシュに基づいて、メッセージの第２のコピーを拒否する。
【００２０】
他の実施形態においては、メッセージ宛先は、インタラクションＩＤ、メッセージＩＤ、およびＴＴＬ値を含むメッセージの第１のコピーを処理する。メッセージ宛先は、処理されたメッセージに指定されたＴＴＬ値に基づく最後のカウントダウンタイマの期間終了に応答して、インタラクションキャッシュから、そのインタラクションＩＤに関する進捗情報を削除する。カウントダウンタイマの期間終了の後で、メッセージ宛先は、メッセージの第２のコピーを受信する。メッセージ宛先は、そのインタラクションＩＤの進捗の指示を求める要求を、メッセージ宛先のクロックレートに同期したクロックレートを有する対応するメッセージ送信元に送信する。メッセージ宛先は、そのメッセージＩＤを含むメッセージを廃棄することができる段階にインタラクションが進んだという指示を受信する。メッセージ宛先は、メッセージの第２のコピーを廃棄する。
【００２１】
他の実施形態においては、メッセージ宛先は、前のインスタンスＩＤに対応するメッセージの第１のコピーを受信する。その後で、メッセージ宛先は、前のインスタンスＩＤを含むように初期化されたメッセージプロセッサインスタンスで、メッセージの第１のコピーを処理する。メッセージ宛先は、その宛先コンピュータシステムによって使用されるメモリの内容が意図せずに失われたことを検出する。メッセージ宛先は、前のインスタンスＩＤとは異なる、更新されたインスタンスＩＤを含むようにメッセージプロセッサインスタンスを再初期化する。メッセージプロセッサインスタンスを再初期化した後で、メッセージ宛先は、前のインスタンスＩＤに対応するメッセージの第２のコピーを受信する。メッセージ宛先は、そのメッセージの第２のコピーが、更新されたインスタンスＩＤとは異なるインスタンスＩＤに対応しているので、メッセージの第２のコピーを拒否する。
【００２２】
他の実施形態においては、メッセージ送信元は、インタラクションＩＤ、メッセージＩＤ、およびＴＴＬ値を含むメッセージの第１のコピーを、メッセージ送信元のクロックレートに同期したクロックレートを有するメッセージ宛先に送信する。メッセージの第１のコピーを送信した後で、メッセージ送信元は、インタラクションＩＤ、メッセージＩＤ、および更新されたＴＴＬ値を含むメッセージの第２のコピーを宛先コンピュータシステムに送信する。更新されたＴＴＬ値は、メッセージの第１のコピーに指定されたＴＴＬ値から、メッセージの第１のコピーが送信された後の経過時間を減算することによって計算される。メッセージ送信元は、メッセージのＴＴＬが期間終了したことを検出する。メッセージ送信元はインタラクションキャッシュを更新して、そのメッセージがもはや確認応答を必要としないことを指示する。
【００２３】
本発明の範囲に含まれる諸実施形態には、その上に格納されたコンピュータ実行可能な命令またはデータ構造を搬送するかまたは格納するコンピュータ読取可能媒体が含まれる。この様なコンピュータ読取可能媒体は、汎用または専用のコンピュータシステムによってアクセス可能な任意の使用可能な媒体であってよい。限定の意味ではなく例として、この様なコンピュータ読取可能媒体には、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、他の任意の媒体などの物理記憶媒体が含まれる。これらの媒体を使用して、コンピュータ実行可能な命令、コンピュータ読取可能命令、またはデータ構造の形で所望のプログラムコード手段を搬送するかまたは格納することができ、また汎用または専用のコンピュータシステムによってこれらの媒体にアクセスすることができる。
【００２４】
本明細書および添付の特許請求の範囲において、「ネットワーク」とは、コンピュータシステムおよび／またはモジュール間での電子データの伝送を可能にする１つまたは複数のデータリンクと定義される。ネットワークまたは他の通信接続（有線、無線、または有線もしくは無線の組合せ）を介して情報がコンピュータシステムに送信または供給されるとき、その接続はコンピュータ読取可能媒体と見なすのが適切である。したがって、このような接続もコンピュータ読取可能媒体と呼ぶのが適切である。上記の組合せもまた、コンピュータ読取可能媒体の範囲に含めるものとする。コンピュータ実行可能な命令には、例えば、汎用コンピュータシステムまたは専用コンピュータシステムに特定の機能または機能群を実施させる命令およびデータが含まれる。コンピュータ実行可能な命令とは、例えば、バイナリ命令、アセンブリ言語など中間形式の命令、さらにソースコードのことである。
【００２５】
本明細書および添付の特許請求の範囲において、「コンピュータシステム」とは、共同して電子データの操作を実施する、１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはそれらモジュールの組合せと定義される。例えば、コンピュータシステムの定義には、パーソナルコンピュータのハードウェアコンポーネント、およびパーソナルコンピュータのオペレーティングシステムなどのソフトウェアモジュールが含まれる。モジュールの物理レイアウトは重要ではない。コンピュータシステムは、ネットワークを介して結合される１つまたは複数のコンピュータで構成することができる。同様に、コンピュータシステムは、その内部モジュール（例えば、メモリやプロセッサなどの）が共同して電子データの操作を実施する単一の物理デバイス（例えば、携帯電話や「ＰＤＡ」（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）など）で構成することもできる。
【００２６】
当業者ならば、本発明が、多くの種類のコンピュータシステム構成、例えばパーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースもしくはプログラマブルな家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ポケベルなどを備えるネットワークコンピュータ環境で実施可能であることを理解されよう。本発明はまた、ネットワークを介して（有線データリンクか無線データリンクのどちらか、あるいは有線および無線データリンクの両方によって）リンクされた、どちらもがタスクを実行するローカルおよびリモートのコンピュータシステムからなる分散システム環境においても実施可能である。分散システム環境では、プログラムモジュールは、ローカルおよびリモートの両方のメモリ記憶装置に配置することができる。
【００２７】
本明細書および添付の特許請求の範囲において、「メッセージ送信元」とは、高信頼のメッセージ交換の発信元と定義される。メッセージ送信元は、確実に送達されるメッセージを生成するアプリケーション、および確実な交換を管理するインフラストラクチャの両方を表すことができる。「ＳＯＡＰ」（Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ）処理モデルでは、送信元とは最初の送信装置のことである。
【００２８】
本明細書および添付の特許請求の範囲において、「メッセージ宛先」とは、高信頼のメッセージ交換の宛先と定義される。メッセージ宛先は、メッセージを使用するアプリケーション、および信頼できる交換を管理するインフラストラクチャの両方を表すことができる。ＳＯＡＰ処理モデルでは、宛先とは最終的な受信装置のことである。
【００２９】
本明細書および添付の特許請求の範囲においては、メッセージ送信元とメッセージ宛先のクロックの動作が、レートの許容可能ドリフトの指定された上限の範囲内にあるときに、メッセージ送信元およびメッセージ宛先は「同期されたクロックレート」を有するものとする。
【００３０】
ドリフトは様々な方法で定義できる。世界共通時計（ｇｌｏｂａｌ  ｕｎｉｖｅｒｓａｌ  ｃｌｏｃｋ）を参照した場合、ドリフトは次式で定義される。
【００３１】
ドリフト＝｜（Ｓ２−Ｓ１）−（Ｄ２−Ｄ１）｜／（Ｃ２−Ｃ１）
また、上限は次式で定義される。
【００３２】
上限＝Ｍｉｎ（一方向待ち時間）／Ｍａｘ（ＴＴＬ）
上式で、Ｓ１およびＤ１はそれぞれ、共通時計が値Ｃ１を有する瞬間の送信元および宛先の時計値であり、Ｓ２およびＤ２はそれぞれ、その後共通時計が値Ｃ２を有する瞬間の送信元および宛先の時計値である。ドリフト＜上限が成立するとき、ドリフトは許容される（すなわち、送信元および宛先のクロックが同期したレートを有すると見なされる）。
【００３３】
一方向待ち時間（ｏｎｅ−ｗａｙ  ｌａｔｅｎｃｙ）は、（例えば、未知のシーケンスに対して、宛先によって開始された「ＲＥＱＡＣＫＡＣＫ」メッセージの待ち時間によって捕捉されるなど）宛先から送信元に向けて測定される。ＴＴＬは、メッセージに指定されたＴＴＬであり、例えば、往復遅延時間の何倍かの値である。したがって、指定されたメッセージのＴＴＬが大きくなるほど、送信元および宛先のクロックのドリフトレートに関する要件がより厳しくなる。一方、指定されたメッセージのＴＴＬが小さくなるほど、送信元および宛先クロックのドリフトレートに関する要件がより緩和される。
【００３４】
世界共通時計を参照しない場合、送信元の観点からのドリフトは次式のように定義できる。
【００３５】
送信元ドリフト＝（Ｄ２−Ｄ１）／（Ｓ２−Ｓ１）
宛先の観点からのドリフトは次式のように定義できる。
【００３６】
宛先ドリフト＝（Ｓ２−Ｓ１）／（Ｄ２−Ｄ１）
また、上限は次式で定義できる。
【００３７】
上限＝Ｍｉｎ（一方向待ち時間）／Ｍａｘ（ＴＴＬ）
上式では、どちらの時計も進む方向に動作するものと想定する。すなわち、Ｓ２＞Ｓ１かつＤ２＞Ｄ１である。例えば、宛先クロックの方がより速く動作するときには、送信元ドリフト＞１、宛先ドリフト＜１となり得る。ドリフトは、宛先ドリフト＜上限が成立するとき（すなわち、送信元と宛先のクロックが同期したレートを有すると見なされるとき）に許容される。一方向待ち時間は、宛先から送信元に向けて測定される。ＴＴＬはメッセージに指定されたＴＴＬであり、例えば往復遅延時間の何倍かの値である。
【００３８】
本発明の実施形態が、各クロックを絶対時間に同期させる必要がないことを理解されたい。
【００３９】
メッセージングアーキテクチャ
図１は、同期レートのクロックを使用した高信頼メッセ−ジングを容易にするコンピュータアーキテクチャ１００の一例を示す。コンピュータアーキテクチャ１００に示されているように、コンピュータシステム１０２、１０３、１０４、１０６、および１０７はネットワーク１０１に接続されている。ネットワーク１０１は、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、あるいはインターネットであってもよい。ネットワーク１０１に接続されたコンピュータシステムは、コンピュータアーキテクチャ１００の形で接続された他のコンピュータシステムとの間でデータを送受信する。したがって、コンピュータシステム１０２、１０３、１０４、１０６、１０７、および接続された他のコンピュータシステム（図示せず）は、メッセージに関連したデータ（例えば、インターネットプロトコル（「ＩＰ」）データグラムおよびＩＰデータグラムを使用する上位層プロトコル、例えば伝送制御プロトコル（「ＴＣＰ」）、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）、簡易メール転送プロトコル（「ＳＭＴＰ」）など）を、ネットワーク１０１を介して交換することができる。
【００４０】
コンピュータシステム１０２、１０３、１０４、１０６、および１０７はそれぞれ、対応するインタラクションキャッシュ１２２、１２３、１２４、１２６、および１２７を備える。各インタラクションキャッシュ１２２、１２３、１２４、１２６、および１２７は、他のコンピュータシステムとのインタラクションシーケンスに対応したインタラクションＩＤ、および各インタラクションシーケンスごとに処理されたメッセージのメッセージＩＤのリストを保持することができる。各インタラクションキャッシュ１２２、１２３、１２４、１２６、および１２７はまた、各メッセージの生存時間（「ＴＴＬ」）値を保持することもできる。ＴＴＬ値によって、送信元が宛先にメッセージの送達を試みる継続時間を指示することができる。送信元でＴＴＬの期限が切れたときには、送信元は、（例えば、送信元がそのメッセージが失われたものと見なした結果として）そのメッセージがもはや確認応答を必要としないことを指示することができる。宛先でＴＴＬの期限が切れたときには、宛先は、続いてインタラクションキャッシュから対応するメッセージＩＤおよび／またはインタラクションＩＤを削除する（それによって、システムリソースを開放する）ことができる。
【００４１】
コンピュータシステム１０２、１０３、１０４、１０６、および１０７はそれぞれ、対応するクロック１１２、１１３、１１４、１１６、および１１７を備える。各クロック１１２、１１３、１１４、１１６、および１１７は同期したレートを有することができる。すなわち、基本的に同じレートでクロックの時間が進む。例えば、クロック１１２、１１３、１１４、１１６、および１１７の間で、秒、分、時、日、月、年などの定義を共通に認識させることができる。したがって、複数のクロックの絶対時間が同期していない場合でも、その複数のクロックの相対変化を一致させることができる。
【００４２】
したがって、ある時間が経過した後で、第１のクロックが何分か進んだとき、（第１のクロックと同期したレートを有する）第２のクロックが同じ分だけ進む可能性は非常に高い。例えば、第１のクロックが、午後５時０５分の絶対時間を示し、第２のクロックが午後５時０７分の絶対時間を示しているとする。６分経過して、第１のクロックが午後５時１１分に進んだとき、第２のクロックが午後５時１３分に進んでいる可能性は非常に高くなる。
【００４３】
さらに、相互に関連するクロックのレートにある程度のドリフトがあるとしても、それらのクロックを同期したレートを有するクロックと見なし得ることを理解されたい。例えば、通信中のコンピュータシステムのクロック間のドリフトレートが、その通信コンピュータシステム間の往復待ち時間より短いとき、本発明の諸実施形態は特に有利なものになる。
【００４４】
いくつかの実施形態では、送信元がそのメッセージを、（Ａ）処理した、または（Ｂ）損失したと見なした後で、宛先は、そのメッセージを処理したことを（例えば、そのメッセージインタラクションをメモリから削除することによって）忘れる（ｆｏｒｇｅｔ）ことができる。実際には、イベント（Ａ）は、宛先が、対応するメッセージＩＤを含むＡＣＫＡＣＫヘッダを（送信元から）受信したときに発生し得る。実際には、イベント（Ｂ）は、ＴＴＬの期限が切れたときに発生し得る。すなわち、宛先は、メッセージのＴＴＬの期限が切れた場合に、そのメッセージが損失したと送信元が見なしたことを知ることになる。いくつかの実施形態では、各メッセージは、（メッセージを送信し、続いて確認応答を受信するまでの）最小の往復遅延時間の後に確認応答される。したがって、ＴＴＬは往復遅延時間より大きい値に設定することができる。実際には、ＴＴＬは、数回の再送をサポートするために往復遅延時間の何倍かに、（または、正確に１回の送達を可能にするために無限大値に）設定される。
【００４５】
コンピュータシステム１０７は、コンピュータシステム１０２、１０３、１０４、および１０６を含めた多数のクライアント（例えば、ウェブブラウザ）から電子メッセージを受信するサーバを含むこともある。したがって、コンピュータシステム１０７は、任意のクライアントから受信したメッセージを処理するメッセージプロセス（例えば、メッセージ処理インスタンス１３７）を実行することができる。
【００４６】
メッセージ送信元アルゴリズム
次に、図６を参照すると、メッセージ送信元が確実にメッセージを送達するための方法６００の流れ図の一例が示されている。方法６００は、メッセージにインタラクションＩＤ、シーケンス番号、ＴＴＬ値を追加する動作を含む。例えば、コンピュータシステム１０６は、メッセージ１５１にインタラクションＩＤ１５２、カウント１５３、およびＴＴＬ値１５４を追加することができる。したがって、メッセージは、Ｍｓｇ（ＩＤ、Ｎ、ＴＴＬ、Ｄａｔａ）のフォーマットを取ることができる。この場合、データには、高信頼メッセ−ジングのインフラストラクチャによって使用されるトラッキング情報を補うこともできる。
【００４７】
ＩＤは、メッセージ送信元とメッセージ宛先の間のインタラクションを一意に識別する。メッセージオフセット番号Ｎは、メッセージ送信元とメッセージ宛先の間のインタラクションにおけるメッセージのオフセット（例えば、順序（ｏｒｄｉｎａｌ  ｒａｎｋ））を識別する整数値を取ることができる。インタラクション用ＩＤおよびメッセージオフセット番号Ｎを併せて、信頼できるメッセージを一意に識別する。ＴＴＬは、メッセージ送信元がメッセージを確実に送達しようと試みる継続期間を示す。
【００４８】
方法６００は、ＴＴＬ値の継続期間を示すカウントダウンタイマを開始する動作を含む（動作６０２）。例えば、コンピュータシステム１０６はＴＴＬ値１５４の継続期間を示すカウントダウンタイマを開始する。方法６００は、メッセージを送信する動作を含む。例えば、コンピュータシステム１０６（メッセージ送信元）は、メッセージ１５１をコンピュータシステム１０７（メッセージ宛先）に送信することができる。
【００４９】
メッセージ送信元は、ＴＴＬ値を、メッセージ送信元とメッセージ宛先の間の往復待ち時間の何倍かに設定することができる。指定された間隔（例えば、往復待ち時間に等しい間隔）で、メッセージ送信元は、メッセージ（例えば、メッセージ１５１）の再送を試みることができる。例えば、コンピュータシステム１０６と１０７の間の往復待ち時間が１０ｍｓの場合、ＴＴＬ値１５４は６０ｍｓに設定することができる。ＴＴＬ値１５４を６０ｍｓに設定することにより、（指定された間隔に依存するが）少なくとも６回の再送が可能になる。
【００５０】
方法６００は、再送間隔の期間終了を検出する動作を含む（動作６０４）。例えば、コンピュータシステム１０６は、メッセージ１５１に対応する再送間隔の期間終了を検出することができる。
【００５１】
方法６００は、メッセージが確認応答済みか否かを判定することを含む（判定ブロック６０５）。メッセージが確認応答済み（判定ブロック６０５でＹＥＳ）のとき、方法６００は動作６０７を実施する。例えば、コンピュータシステム１０６は、コンピュータシステム１０７から、インタラクションＩＤ１５２およびカウント１５３を指示したＡＣＫ１６１を受信することができる。したがって、確認応答は、ＡＣＫ（ＩＤ、Ｎ）の形を取ることができる。この場合、確認応答は、ＩＤによって識別されるインタラクションのメッセージＮ（またはＮによって表される１つまたは複数のメッセージオフセット範囲、例えば、（１〜６、１０〜１４、１６））がメッセージ宛先に到着したことを指示する。メッセージ送信元がＡＣＫを受信したとき、メッセージ送信元は対応するインタラクションキャッシュ（例えば、インタラクションキャッシュ１２６）を更新してメッセージ（例えば、メッセージ１５１）がもはや確認応答を必要としないことを指示することができる。
【００５２】
一方、メッセージが確認応答されていない（判定ブロック６０５でＮＯの）ときには、方法６００は、判定ブロック６０６で判定を実施する。このように、方法６００には、カウントダウンタイマの期限が切れたかどうかの判定（判定ブロック６０６）を含めることができる。例えば、コンピュータシステム１０６は、ＴＴＬ値１５４に基づくカウントダウンタイマの期限が切れたかどうかを判定することができる。カウントダウンタイマの期限が切れた（判定ブロック６０６でＹＥＳ）とき、方法６００は動作６０７を実施する。一方、カウントダウンタイムの期限が切れていない（判定ブロック６０６でＮＯの）ときは、方法６００は動作６０８を実施する。
【００５３】
方法６００は、ＴＴＬ値とカウントダウンタイマを再計算する動作（動作６０８）を含む。例えば、コンピュータシステム１０６は、再送間隔を検出した後で、メッセージ１５１のＴＴＬ値およびカウントダウンタイマを再計算することができる。したがって、元のＴＴＬ値が６０ｍｓで、再送間隔が１０ｍｓであった場合は、メッセージ１５１を再送する前に、新しいＴＴＬ値を５０ｍｓに設定することができる。
【００５４】
方法６００は、そのメッセージがもはや確認応答を必要としないことを指示する動作（動作６０７）を含む。例えば、コンピュータシステム１０６はインタラクションキャッシュ１２６を更新してメッセージ１５１がもはや確認応答を必要としないことを指示することができる。したがって、コンピュータシステム１０６は、コンピュータシステム１０７からの確認応答の後、またはカウントダウンタイマの期限が終了したときにメッセージ１５１の再送を終了することができる。
【００５５】
時々に、またはメッセージ宛先からの要求に応答して、メッセージ送信元は、メッセージ送信元がもはやメッセージの確認応答を必要としないことをメッセージ宛先に指示するためにＡＣＫＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ−Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ）を送信することができる。例えば、コンピュータシステム１０６は、インタラクションＩＤ１５２およびカウント１５３を含むＡＣＫＡＣＫ１７１をコンピュータシステム１０７に送信することができる。したがって、ＡＣＫＡＣＫは、ＡＣＫＡＣＫ（ＩＤ、Ｎ）の形を取ることができる。この場合、ＡＣＫＡＣＫにより、ＩＤによって識別されるインタラクションのメッセージＮ（または、Ｎによって表される１つまたは複数のメッセージオフセット範囲、例えば、（１〜３、５、８〜１２））に対する確認応答をメッセージ送信元が必要としないことが指示される。ＡＣＫＡＣＫは、メッセージ宛先でメッセージプロセッサインスタンスを識別するインスタンスＩＤを含むこともできる。例えば、ＡＣＫＡＣＫ１７１は、コンピュータシステム１０６が認識していたメッセージ処理インスタンス１３７の最後のインスタンスに対応するインスタンスＩＤ１７２を含む。
【００５６】
メッセージ宛先からの要求は、メッセージ宛先がインタラクションを進めることを求めていることを示すＲＥＱＡＣＫＡＣＫ（Ｒｅｑｕｅｓｔ  Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ  Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ）メッセージ（図１には図示せず）であってもよい。したがって、ＲＥＱＡＣＫＡＣＫは、ＲＥＱＡＣＫＡＣＫ（ＩＤ）の形を取ることができる。この場合、ＲＥＱＡＣＫＡＣＫは、メッセージ宛先が、以前に進めていたＩＤによって識別されるインタラクションを進めることを求めていることを指示する。定期的に、およびＲＥＱＡＣＫＡＣＫ（ＩＤ）の受信に際して、送信元はＡＣＫＡＣＫ（ＩＤ、Ｎ）を宛先に送信することができる。
【００５７】
メッセージ宛先アルゴリズム
次に、図７を参照すると、図７にはメッセージを確実に送達するための宛先での方法７００の流れ図の一例が示されている。方法７００には、メッセージを受信する動作が含まれる。例えば、コンピュータシステム１０７はメッセージ１５１を受信することができる（動作７０１）。方法７００は、存在する場合には、受信したインスタンスＩＤが現在のインスタンスＩＤに一致するかどうかを判定することが含まれる。例えば、コンピュータシステム１０７は、インスタンスＩＤ１７２がメッセージ処理インスタンス１３７の現在のインスタンスＩＤと一致するかどうかを判定することができる。コンピュータシステム１０６は、メッセージ１５１にオプションでインスタンスＩＤ１７２を含めることができる（図示せず）。しかし、ＲＥＱＡＣＫＡＣＫに応答して送信するＡＣＫＡＣＫメッセージの中にインスタンスＩＤ１７２を含めるように、コンピュータシステム１０６に要求することもできる。例えば、メッセージ１５１を受信した後で、コンピュータシステム１０７はＲＥＱＡＣＫＡＣＫ（インタラクションＩＤ１５２）をコンピュータシステム１０６に送信することができる。コンピュータシステム１０６は、ＡＣＫＡＣＫ（インタラクションＩＤ１５２、メッセージオフセット番号（カウント１５３と異なっていることもある）、インスタンスＩＤ１７２）で応答することができる。
【００５８】
受信したインスタンスＩＤが現在のインスタンスＩＤと一致しない（判定ブロック７０２でＮＯの）ときは、方法７００は動作７０８を実施する。一方、受信したインスタンスＩＤが現在のインスタンスＩＤと一致した（判定ブロック７０２でＹＥＳの）ときは、方法７００は判定ブロック７０３で判定を実施する。
【００５９】
方法７００には、メッセージに確認応答が必要かどうかを判定することが含まれる（判定ブロック７０３）。例えば、コンピュータシステム１０７は、メッセージ１５１に確認応答が必要かどうかを判定することができる。コンピュータシステム１０７は、インタラクションキャッシュ１２７を調べて、メッセージ１５１に対して以前にＡＣＫＡＣＫが受信されているかどうかを判定することができる。ＡＣＫＡＣＫが以前に受信されていた場合は、メッセージ１５１は、もはや確認応答を必要としない。インタラクションキャッシュ１２７に、インタラクションＩＤ１５１で識別されるインタラクションが含まれていない場合もある。したがって、コンピュータシステム１０７は、ＲＥＱＡＣＫＡＣＫ（インタラクションＩＤ１５１）をコンピュータシステム１０６に送信することもできる。この応答として、コンピュータシステム１０７は、対応するＡＣＫＡＣＫをコンピュータシステム１０６から受信することができる。コンピュータシステム１０７は、ＡＣＫＡＣＫ中の進捗情報（例えば、メッセージオフセット番号およびインスタンスＩＤなど）を用いてインタラクションキャッシュ１２７を更新することができる。
【００６０】
方法７００は確認応答を送信する動作（動作７０４）を含む。例えば、コンピュータシステム１０７は、インタラクションＩＤ１５２およびカウント１５３を含むＡＣＫ１６１をコンピュータシステム１０６に送信して、メッセージ１５１の受信を知らせることができる。
【００６１】
方法７００はまた、メッセージを処理すべきかどうかを判定することを含む。例えば、コンピュータシステム１０７は、メッセージ１５１を処理すべきかどうかを判定することができる。そのメッセージを処理すべきでない場合（判定ブロック７０５でＮＯのとき）は、方法７００は動作７０８を実施する。一方、メッセージを処理すべき場合（判定ブロック７０５でＹＥＳのとき）は、方法７００は動作７０６を実施する。
【００６２】
方法７００は、カウントダウンタイマを開始する動作（動作７０６）を含む。例えば、メッセージ１５１の受信に際し、コンピュータシステム１０７は、ＴＴＬ値１５４に基づいてカウントダウンタイマを開始することができる。コンピュータシステム１０７は、タイマ期間が終了するか、または対応するＡＣＫＡＣＫを受信するまで、インタラクションＩＤ１５２およびカウント１５３を保持しなければならない。方法７００は、メッセージを処理する動作（動作７０７）を含む。例えば、コンピュータシステム１０７は、メッセージを順に処理するメッセージ処理インスタンス１３７にメッセージ１５１を送達することができる。
【００６３】
方法７００は、インタラクションキャッシュを更新する動作を含む（動作７０９）。例えば、コンピュータシステム１０７はインタラクションキャッシュ１２７を更新することができる。インタラクションキャッシュは、ＡＣＫＡＣＫ（例えば、ＡＣＫＡＣＫ１７１）を受信した後で、または（例えば、ＴＴＬ値１５４に基づく）カウントダウンタイマの期間が終了した後で更新することができる。したがって、コンピュータシステム１０７は、カウントダウンタイマの期間が終了し、指定された期間インタラクションＩＤがアイドル状態になっているインタラクションのインタラクションキャッシュ１２７を、定期的に消去することができる。
【００６４】
方法７００は、メッセージを廃棄する動作を含む（動作７０８）。例えば、コンピュータシステム１０７はメッセージ１５１を廃棄することができる。メッセージは、インスタンスＩＤが一致しないとき、メッセージに対するＡＣＫＡＣＫが以前に受信されているとき、そのメッセージが以前に処理済みであるとき、またはメッセージに対するカウントダウンタイマの期間が終了したときに廃棄することができる。
【００６５】
メッセージ送信元とメッセージ宛先の相互動作
方法６００（メッセージ送信元の観点）および方法７００（メッセージ宛先の観点）を同時に使用して、高信頼メッセージングを提供することができる。いくつかの実施形態では、最初のシーケンスのメッセージを処理する前に、様々な前提条件が設定される。例えば、メッセージ送信元は、メッセージ宛先エンドポイントインスタンス（例えば、メッセージ処理インスタンス１３７）を一意に識別し、そのメッセージ宛先エンドポイントインスタンスに宛てられた各メッセージ間の相互関係を意味付けるエンドポイント参照を受信する。宛先は、エンドポイントインスタンスが初期化されるたびに、（例えば、処理状態を把握しない（ｓｔａｔｅｌｅｓｓ）ブート時間に）メッセージ宛先インスタンスＩＤを再設定することができる。さらに、メッセージ送信元は、（存在する場合には）メッセージ宛先のポリシーに関する知識を有することができ、（ＷＳ−Ｍｅｔａｄａｔａ  Ｅｘｃｈａｎｇｅによって容易になる）任意のポリシーに従うメッセージを作成することができる。さらに、セキュアなメッセージ交換が必要なときは、メッセージ送信元およびメッセージ宛先は、（例えば、ＷＳ−ＳｅｃｕｒｅＣｏｎｖｅｒｓａｔｉｏｎによって容易になる）セキュアなコンテクストを設定することもできる。
【００６６】
さらに、宛先が、信頼できるメッセージングシーケンス情報をメモリから定期的に削除する場合でも、信頼できるメッセージングシーケンス情報をセキュアにする他の機構が可能である。例えば、メッセージ宛先は、セッションキー（または、共用キー）を（例えば、秘密／公開キーペアの）秘密キーで暗号化し、暗号化されたセッションキーを（例えば、トークンの形で）メッセージ送信元に送信することができる。メッセージ送信元はトークンを受信し、後での使用のためにそのトークンを保持することができる。メッセージ送信元はまた、暗号化されたセッションキーを対応する（秘密／公開キーペアの）公開キーを用いて暗号化解除して、暗号化されてないセッションキーを取り出すこともできる。インタラクションに含まれる後続のメッセージは、このセッションキーを用いてセキュアにすることができる。
【００６７】
時々に、メッセージ宛先は、メッセージ宛先が忘れている（すなわち、インタラクションＩＤなどが、対応するインタラクションキャッシュから削除された）インタラクションを求めるメッセージを受信することがある。それに応答して、メッセージ宛先は、インタラクションのトラッキング情報を求めるＲＥＱＡＣＫＡＣＫをメッセージ送信元に送信することができる。ＲＥＱＡＣＫＡＣＫ（および、ＡＣＫＡＣＫに潜在的に含まれた要求）に応答して、メッセージ送信元は、そのインタラクションに関して以前に受信したトークンをメッセージ宛先に送信することができる。メッセージ宛先は、（それ自体の公開／秘密キーペアを知っているので）トークンを暗号化解除して、そのインタラクションに対応する暗号化されていないセッションキーまたは共用キーを取り出すことができる。インタラクションに含まれる後続のメッセージは、セッションキーを使用してセキュアにすることができる。
【００６８】
メッセージ送信元が、あるインタラクションのトークンを提供できない（したがって、対応するセッションまたは共用キーを提供できない）ときは、メッセージ宛先は、新しいインタラクションＩＤ、および新しいメッセージＩＤである１を用いて、新しいインタラクションを開始する。次に、メッセージ宛先は、新しいトークンをメッセージ送信元に送信して、新しいインタラクションのための新しいセキュリティコンテキストを確立することができる。したがって、本発明の諸実施形態を使用して、信頼できるメッセージングセッションが乗っ取られる（ｈｉｊａｃｋｅｄ）可能性を低減し、それを潜在的に防止することができる。
【００６９】
さらに、様々なプロトコル不変量を定めて、信頼できるメッセージングを保証することができる。例えば、メッセージ送信元は、メッセージオフセット番号（Ｎ）を１に初期化し、そのインタラクションの後続のメッセージごとに、メッセージオフセット番号を１ずつ増加させることができる。さらに、確認応答には、メッセージ宛先によって正常に受信され、ＡＣＫＡＣＫに指定されたあらゆるメッセージのシーケンス番号の１つまたは複数の範囲で、未だ受信されていないメッセージのメッセージオフセット番号を除去したものを含めることができる。さらに、メッセージ送信元から発行されるＡＣＫＡＣＫには、ＡＣＫが受信されたか、またはそのＴＴＬ期間が終了した、あらゆるメッセージの確認応答範囲またはメッセージオフセット番号の各範囲を含めることができる。ＴＴＬ期間が終了したとき、宛先は、送信元がメッセージ（またはメッセージの範囲）が失われたと見なしたことを知ることになる。したがって、宛先は、そのメッセージ（またはメッセージの範囲）のためのメッセージ範囲確認応答を終了することができる。
【００７０】
したがって、様々な条件下でメッセージの複数のコピーが受信されたときに、メッセージ処理インスタンスへの多くても１回の送達が保証される。例えば、メッセージ宛先のインタラクションキャッシュに（ＴＴＬ期間が終了する前後で）メッセージＩＤおよび対応する指定されたインタラクションが保持されているとき、メッセージ宛先のインタラクションキャッシュからメッセージＩＤ（および場合によっては対応する指定されたインタラクション）が消去されたとき、およびメッセージ宛先が意図しないメモリ損失を受けたときなどに、多くても１回の送達が保証される。
【００７１】
メッセージがメッセージ宛先で受信されたとき、メッセージ宛先は、受信したメッセージがインスタンスＩＤを含むかどうかを判定する。受信したメッセージにインスタンスＩＤが含まれない場合、およびそのメッセージで指定されたインタラクションＩＤがインタラクションキャッシュに存在しない場合には、メッセージ宛先はＲＥＱＡＣＫＡＣＫをメッセージ送信元に送信する。メッセージ送信元は、（確立されたプロトコル不変量に基づき、）インスタンスＩＤを含むＡＣＫＡＣＫで応答する。受信されるインスタンスＩＤは（メッセージに含まれているか、それともＡＣＫＡＣＫに含まれているかには関係なく）、以前に（確立された前提条件に基づき）、対応するメッセージプロセッサインスタンスの現在のインスタンスＩＤとしてメッセージ送信元に示されたインスタンスＩＤである。メッセージ宛先は、受信したインスタンスＩＤを、対応するメッセージプロセッサの現在のインスタンスＩＤと比較する。受信したインスタンスＩＤと現在のインスタンスＩＤが一致しないときは（指定されたインタラクションの間に、メッセージ宛先が意図しないメモリ損失を受けたことを潜在的に意味し）、メッセージは拒否され指定されたインタラクションは失敗する。
【００７２】
一方、受信したインスタンスＩＤと現在のインスタンスＩＤが一致したとき（したがって、メッセージ宛先で、指定されたインタラクションの間にインタラクションキャッシュが保持されているとき）は、受信メッセージから他のトラッキング情報を調査する。メッセージ宛先は、対応するインタラクションキャッシュを調べて、受信したメッセージのメッセージＩＤおよびインタラクションＩＤが以前に処理したものかどうかを判定する。メッセージ宛先は、対応するインタラクションキャッシュを定期的に消去することができる（が、必ずしもＴＴＬ値が期間終了した直後である必要はない）ので、インタラクションキャッシュは、有効期間の切れたメッセージに対するトラッキング情報も（少なくともある時間は）保持することができる。したがって、対応するインタラクションキャッシュは、あるメッセージが、受信したメッセージをそのメッセージプロセッサインスタンスに送達した結果として、以前に処理されたものであることを指示することができる。対応するインタラクションキャッシュが、その受信メッセージが以前に処理されものであることを指示するとき、その受信メッセージは廃棄される。
【００７３】
しかし、対応するインタラクションキャッシュに、そのメッセージのトラッキング情報が含まれていないことがある。対応するインタラクションキャッシュにトラッキング情報が含まれていないとき、メッセージ宛先はＲＥＱＡＣＫＡＣＫをメッセージ送信元に送信する。例えば、受信したメッセージが以前にその宛先によって処理されたものである場合もある。宛先インタラクションキャッシュの中に、受信メッセージによって指定されたインタラクションＩＤのトラッキング情報が存在しない場合は、メッセージ宛先で、指定されたインタラクションの一部であるすべてのメッセージに対するカウントダウンタイマが期間終了になっているはずである。そうでなければ、宛先メッセージプロセッサは、指定されたインタラクションをそのインタラクションキャッシュから消去していなかったはずである。このことは、そのメッセージのカウントダウンタイマが、メッセージ送信元でも期間終了になっているはずであることを意味する。なぜならば、メッセージ送信元は、メッセージを送信する前にカウントダウンタイマを起動し、しかもメッセージ送信元とメッセージ宛先は同期したクロックレートを有しているからである。
【００７４】
メッセージ送信元で先にＡＣＫを受信したこと、またはカウントダウンタイマが終了したことによって、メッセージ送信元は、（たとえそのメッセージが、カウントダウンタイマが終了する前に最後に送られたものであっても）そのメッセージの確認応答がもはや必要ないことを（返されるＡＣＫＡＣＫの中で）指示する。メッセージ宛先は、ＡＣＫＡＣＫを受信し、ＡＣＫＡＣＫのトラッキング情報とメッセージに含まれていたトラッキング情報とを比較する。ＡＣＫＡＣＫは、そのメッセージの確認応答が必要ないことを指示しているので、メッセージ宛先はそのメッセージを廃棄する。
【００７５】
図２は、メッセージ宛先でインタラクションキャッシュにメッセージＩＤが保持されているときに、高信頼メッセージングを容易にする第１の例のメッセージフロー２００を示す。メッセージフロー２００は、ＴＴＬ期間が終了する前にメッセージの第２のコピーが受信されたときに、多くても１回の送達を保証する。
【００７６】
メッセージフロー２００に示したように、送信元２０１および宛先２０２は電子メッセージを交換する。送信元２０１は、コンピュータシステム１０２、１０３、１０４、および１０６のうちの１つであってもよく、宛先２０２はコンピュータシステム１０７であってもよい。送信元２０１および宛先２０２は、同期されたクロックレート２０３で進むクロックを備える。したがって、送信元２０１および宛先２０２の時間値における相対変化が一致する可能性は非常に高い。例えば、ある時間が経過した後、送信元のクロックが１０分１２秒進んだ場合、同じ時間が経過した後に、宛先２０２の対応するクロックもまた１０分１２秒進んでいる可能性は非常に高くなる。
【００７７】
メッセージフロー２００は、メッセージ２０４を送信するメッセージ送信元２０１（例えば、ウェブブラウザ）の動作を含む。メッセージ２０４は、インタラクションＩＤ２１４、メッセージＩＤ２２４、生存時間（「ＴＴＬ」）値２３４、およびデータ２４４を含む。インタラクションＩＤ２１４は、メッセージ送信元２０１とメッセージ宛先２０２の間の指定されたインタラクションに対応するメッセージ２０４を識別する。メッセージＩＤ２２４は、（インタラクションＩＤ２１４に対応する）指定されたインタラクションの一部として交換される一連のメッセージにおける、メッセージ２０４の位置を識別する。データ２４４は、宛先２０２のモジュール（例えば、メッセージプロセッサインスタンス２３６）に送信されるデータ（例えば、アプリケーションデータ）の一部である。ＴＴＬ値２３４は、送信元２０１がメッセージ２０４の送達を試みる時間の長さを指示する。
【００７８】
ＴＴＬ値２３４に基づいて、メッセージ送信元２０１はタイマ２３９のタイマ継続時間２４１を設定することができる。
【００７９】
メッセージ宛先２０２（例えば、ウェブサーバ）は、メッセージ２０４を受信することができる。メッセージ２０４を受信したとき、メッセージ宛先２０２はデータ２４４をメッセージプロセッサインスタンス２３６に送り、そのインスタンスでデータ２４４を順に処理することができる。インタラクションキャッシュ２３７を更新して、メッセージ２０４が処理されたことを指示することができる。例えば、インタラクションキャッシュ２３７を更新して、メッセージＩＤ２２４を有するメッセージが、インタラクションＩＤ２１４によって識別されるインタラクションのために処理されたことを示すことができる。ＴＴＬ値２３４に基づいて、タイマ２４９はタイマ継続時間２５１を設定することができる。タイマ継続時間２５１は、タイマ継続時間２４１の少し後に（例えば、少なくともメッセージ２０４のメッセージ待ち時間の後に）終了する。
【００８０】
メッセージ宛先２０２は、インタラクションＩＤ２１４およびメッセージＩＤ２２４を含むＡＣＫメッセージ２０８を送信して、メッセージ２０４が処理されたことを指示することができる。しかし、メッセージ送信元２０１は、（例えば、メッセージ送信元２０１とメッセージ宛先２０２を接続するネットワーク上の通信エラーにより）ＡＣＫメッセージ２０８を受信しない可能性がある。したがって、再送間隔が終了したとき、メッセージ送信元２０１は、メッセージ２０４の追加のコピーを宛先２０２に送信する可能性がある。メッセージ送信元２０１は、ＴＴＬ値２３５によって指示されるタイマ２３９の終了までの残り時間として、メッセージ２０４のＴＴＬ値を再計算することができる。
【００８１】
メッセージ宛先２０２は、先のコピーメッセージ２０４を処理した後で、メッセージ２０４の追加のコピーを受信することがあり得る。メッセージ宛先２０２は、メッセージの追加のコピーをインタラクションＩＤ２１４およびメッセージＩＤ２２４から識別することができる。メッセージ宛先２０２はインタラクションキャッシュ２３７を調べ、メッセージＩＤ２２４を有し、インタラクションＩＤ２１４によって識別される指定されたインタラクションに対応するメッセージ（すなわち、メッセージ２０４）が以前に処理されたことを判定することができる。したがって、メッセージ宛先２０２は、メッセージＩＤ２２４を有するメッセージが以前に処理されたことを指示するインタラクションキャッシュ２３７に基づいて、メッセージ２０４の追加のコピーを廃棄することができる。
【００８２】
メッセージフロー２００は、ＴＴＬが終了した後にメッセージの第２のコピーを受信したときにも、多くても１回の送達を保証することができる。例えば、ＴＴＬ値２３４は、交互にタイマ２３９にタイマ継続時間２４２を設定し、タイマ２４９にタイマ持続時間２５２を設定することができる。タイマ継続時間２５２は、タイマ継続時間２４２の少し後に（例えば、少なくともメッセージ２０４のメッセージ待ち時間だけ後に）終了する。
【００８３】
したがって、図２に示したように、メッセージ宛先２０２は、タイマ継続時間２５２が終了したあとにメッセージ２０４の追加のコピーを受信することがあり得る。しかし、メッセージ宛先２０２は、ある時間が経過してから、インタラクションＩＤ２１４およびメッセージＩＤ２２４をメモリから消去することができる。したがって、メッセージ２０４の追加のコピーが受信されるとき、メッセージ継続時間２５２は終了していても、インタラクションキャッシュ２３７は依然としてインタラクションＩＤ２１４およびメッセージＩＤ２２４を含むことになる。したがって、メッセージ宛先２０２は、メッセージＩＤ２２４を有するメッセージが以前に処理されたことを示すインタラクションキャッシュ２３７に基づいて、メッセージ２０４の追加のコピーを拒否することができる。したがって、インタラクションキャッシュがメッセージＩＤを保持しているときは、多くても１回の送達が保証される。
【００８４】
図３は、メッセージ宛先でメッセージＩＤがインタラクションキャッシュから消去されているときに、メッセージを確実に処理することを容易にするメッセージフローの第２の例を示す。メッセージフロー３００は、メッセージの第２のコピーが、対応するメッセージオフセットがメモリから消去されたあとで受信されたときに、多くても１回の送達を保証するものである。
【００８５】
メッセージフロー３００に示されているように、メッセージ送信元３０１とメッセージ宛先３０２は電子メッセージを交換する。送信元３０１は、コンピュータシステム１０２、１０３、１０４、および１０６のうちの１つであってもよく、メッセージ宛先３０２はコンピュータシステム１０７であってもよい。メッセージ送信元３０１およびメッセージ宛先３０２は、同期されたクロックレート３０３で進むクロックを備えることができる。したがって、メッセージ送信元３０１およびメッセージ宛先３０２での時間値の相対変化が一致する可能性は非常に高い。例えば、ある時間が経過した後に、メッセージ送信元３０１のクロックが８分２４秒進んだ場合、同じ時間が経過した後に、メッセージ宛先３０２の対応するクロックもまた８分２４秒進んでいる可能性は非常に高くなる。
【００８６】
メッセージ送信元３０１（例えば、ウェブブラウザ）は、メッセージ３０４を送信する。メッセージ３０４は、インタラクションＩＤ３１４、メッセージＩＤ３２４、生存時間（「ＴＴＬ」）値３３４、およびデータ３４４を含む。インタラクションＩＤ３１４は、メッセージ宛先３０２との間の指定されたインタラクションに対応するメッセージ３０４を識別する。メッセージＩＤ３２４は、（インタラクションＩＤ３１４に対応する）指定されたインタラクションの一部として交換される一連のシーケンスにおけるメッセージ３０４のメッセージシーケンス位置を識別する。データ３４４は、メッセージ宛先３０２のモジュール（例えば、メッセージプロセッサインスタンス３３６）に送信されるデータ（例えば、アプリケーションデータ）の一部である。ＴＴＬ値３３４は、メッセージ送信元３０１がメッセージ３０４の送達を試みる時間の長さを指示する。
【００８７】
ＴＴＬ値３３４に基づいて、メッセージ送信元３０１は、タイマ３３９のタイマ継続時間３４１を設定することができる。
【００８８】
メッセージ宛先３０２（例えば、ウェブサーバ）は、メッセージ３０４を受信することができる。メッセージ３０４を受信したとき、メッセージ宛先３０２は、データ３４４をメッセージプロセッサインスタンス３３６に送り、そのインスタンスでデータ３４４を順に処理することができる。インタラクションキャッシュ３３７を更新してメッセージ３０４が処理されたことを示すことができる。例えば、インタラクションキャッシュ３３７を更新して、メッセージＩＤ３２４を有するメッセージが、インタラクションＩＤ３１４によって識別されるインタラクションのために処理されたことを示すことができる。ＴＴＬ値３３４に基づいて、タイマ３４９はタイマ継続時間３５１を設定することができる。タイマ継続時間３５１は、タイマ継続時間３４１の少し後に（例えば、少なくともメッセージ３０４のメッセージ待ち時間の後に）終了する。
【００８９】
メッセージ宛先３０２は、インタラクションＩＤ３１４およびメッセージＩＤ３２４を含むＡＣＫメッセージ３０８を送信して、メッセージ３０４が処理されたことを指示することができる。しかし、メッセージ送信元３０１は、（例えば、メッセージ送信元３０１とメッセージ宛先３０２を接続するネットワーク上の通信エラーにより）ＡＣＫメッセージ３０８を受信しない可能性がある。したがって、再送間隔が終了したとき、メッセージ送信元３０１は、メッセージ３０４の追加のコピーを宛先３０２に送信するかもしれない。メッセージ宛先３０２は、メッセージ送信元３０１からメッセージ３０４の追加のコピーを受信する。メッセージ送信元３０１は、ＴＴＬ値３３４によって指示されるタイマ３３９の終了までの残り時間として、メッセージ３０４のＴＴＬ値を再計算することができる。
【００９０】
タイマ継続時間３５１の終了の後で、メッセージＩＤ３２４（および、可能な場合はインタラクションＩＤ３１４）が、インタラクションキャッシュ３３７から削除（消去）される。メッセージフロー３００に示されたように、メッセージ３０４の追加のコピーは、タイマ継続時間３４１が終了する前にメッセージ送信元３０１から送信され、タイマ継続時間３５１が終了した後にメッセージ宛先３０２で受信される。メッセージ宛先３０２はまた、メッセージＩＤ３２４（および、可能な場合はインタラクションＩＤ３１４）がインタラクションキャッシュ３３７から削除された後で、メッセージ３０４の追加のコピーを受信する。したがって、メッセージ宛先３０２で追加のコピーが受信されたとき、インタラクションキャッシュ３３７にはメッセージ３０４のトラッキング情報が含まれていない。
【００９１】
したがって、メッセージ宛先３０２は、インタラクションＩＤ３１４を含むＲＥＱＡＣＫＡＣＫ３０６をメッセージ送信元３０１に送信することができる。ＲＥＱＡＣＫＡＣＫ３０６は、インタラクションＩＤ３１４によって識別されるインタラクションの進捗の指示を求める要求である。さらに、メッセージ３０４の追加のコピーが送信された後ある時間が経過すると、タイマ継続時間（３４１または同等のもの）が終了する。このとき、メッセージ送信元３０１はインタラクションキャッシュ３２７を更新して、メッセージ３０４がもはや確認応答を必要としないことを指示する。例えば、インタラクションキャッシュ３２７を更新して、インタラクションＩＤ３１４によって識別されるインタラクションの、メッセージＩＤ３２４を有するメッセージがもはや確認応答を必要としないことを指示することができる。したがって、ＲＥＱＡＣＫＡＣＫ３０６に応答して、メッセージ送信元３０１は、インタラクションＩＤ３１４およびメッセージオフセット３２４を有するＡＣＫＡＣＫ３０７をメッセージ宛先３０２に送信する。ＡＣＫＡＣＫ３０７は、インタラクションＩＤ３１４によって識別されるインタラクションが、メッセージＩＤ３２４を有するメッセージを廃棄できる段階に進んだ（すなわち、確認応答を必要としなくなった）ことを示す。したがって、メッセージ宛先３０２は、メッセージ３０４の追加のコピーを廃棄する。
【００９２】
一般に、メッセージ宛先３０２は、インタラクションへの参加を終了することなく、メモリからインタラクションに関するトラッキング情報を削除する（すなわち、トラッキング情報を忘れる）ように構成される。インタラクションキャッシュ３３７に含まれていないインタラクションに対応するメッセージをメッセージ宛先３０２が受信したとき、メッセージ宛先３０２は、ＲＥＱＡＣＫＡＣＫを適切なメッセージ送信元（例えば、メッセージ送信元３０１）に送信する。メッセージ送信元は、そのインタラクションに関するトラッキング情報を含む、対応するＡＣＫＡＣＫをメッセージ宛先３０２に返すことで応答する。したがって、適切なメッセージ送信元は、メッセージ宛先を適切なトラッキング情報によって更新することができる。したがって、インタラクションキャッシュが消去された場合でも、多くても１回の送達が保証される。
【００９３】
図４には、メッセージ宛先が意図しないメモリ損失を受けたときに、メッセージを確実に処理することを容易にするメッセージフロー４００を示す第３の例が示されている。メッセージフロー４００は、意図しないメモリ損失の後でメッセージの第２のコピーが受信されたときに、多くても１回の送達を保証する。
【００９４】
メッセージフロー４００に示されるように、メッセージ送信元４０１とメッセージ宛先４０２は電子メッセージを交換する。メッセージ送信元４０１は、コンピュータシステム１０２、１０３、１０４、および１０６のうちの１つであってもよく、メッセージ宛先４０２はコンピュータシステム１０７であってもよい。送信元４０１および宛先４０２は、同期されたクロックレート４０３で進むクロックを備えることができる。したがって、メッセージ送信元４０１およびメッセージ宛先４０２での、時間値の相対変化が一致する可能性は非常に高い。例えば、ある時間が経過した後に、メッセージ送信元４０１のクロックが８分２４秒進んだ場合、同じ時間が経過した後に、メッセージ宛先４０２の対応するクロックもまた８分２４秒進んでいる可能性は非常に高くなる。
【００９５】
メッセージ送信元４０１（例えば、ウェブブラウザ）は、メッセージ４０４を送信する。メッセージ４０４は、インタラクションＩＤ４１４、メッセージＩＤ４２４、データ４４４を含み、オプションで（破線で示された）インスタンスＩＤ４５２を含む。インタラクションＩＤ４１４は、メッセージ宛先４０２との間の指定されたインタラクションに対応するメッセージ４０４を識別する。メッセージＩＤ４２４は、（インタラクションＩＤ４１４に対応する）指定されたインタラクションの一部として交換される一連のメッセージにおける、メッセージ４０４のメッセージシーケンス位置を識別する。データ４４４は、メッセージ宛先４０２のモジュール（例えば、メッセージプロセッサインスタンス４５１）に送信されるデータ（例えば、アプリケーションデータ）の一部である。インスタンスＩＤ４５２は、以前に（確立された前提条件に基づいて）、メッセージプロセッサインスタンス４５１の現在のインスタンスＩＤとしてメッセージ送信元に示されたインスタンスＩＤである。
【００９６】
メッセージ宛先４０２（例えば、ウェブサーバ）は、インスタンスＩＤ４５２に対応するメッセージ４０４を受信する。メッセージ４０４のインスタンスＩＤがメッセージプロセスインスタンス４５１の現在のインスタンスＩＤ（すなわち、インスタンスＩＤ４５２）と一致することを検出したとき、メッセージ宛先４０２は、トラッキング情報に関する他の調査を実施する。適切な場合に、メッセージ宛先４０２は、データ４４４をメッセージプロセッサインスタンス４５１に送達し、そのインスタンスでデータ４４４を順に処理する。インタラクションキャッシュ４３７を更新して、メッセージ４０４が処理されたことを指示することができる。例えば、インタラクションキャッシュ４３７を更新して、メッセージＩＤ４２４を有するメッセージが、インタラクションＩＤ４１４によって識別されるインタラクションのために処理されたことを示すことができる。
【００９７】
メッセージ４０４を処理した後で、メッセージ宛先４０２で、（インタラクションキャッシュ４３７の内容を含み）意図しないメモリ損失を受けることがあり得る。したがって、メッセージ宛先４０２は、（例えば、リブートシーケンスの間に）メッセージ宛先４０２で使用されるメモリの内容が意図せずに失われたことを検出する。したがって、メッセージ宛先４０２は、メッセージプロセッサインスタンス４５１を再初期化して、以前のインスタンスＩＤ４５２と異なる更新されたインスタンスＩＤ４６２を有することができる。
【００９８】
メッセージ送信元４０１はメッセージ４０４の確認応答を受信しなかったので、メッセージ送信元４０１は、（例えば、再送間隔が終了したときに）メッセージ４０４の追加のコピーを再送しようと試みることができる。メッセージ宛先４０２は、メッセージプロセッサを再初期化した後で、メッセージ４０４の追加のコピーを受信することができる。図示のように、メッセージ４０４の追加のコピーはオプションでインスタンスＩＤ４５２を含む。メッセージ宛先４０２は、メッセージ４０４の追加のコピーに含まれるインスタンスＩＤ（インスタンスＩＤ４５２）をメッセージプロセッサインスタンス４５１の現在のインスタンスＩＤ（インスタンスＩＤ４６２）と比較する。メッセージ宛先４０２は、メッセージ４０４の追加のコピーが、インスタンスＩＤ４６２ではなくインスタンスＩＤ４５１に対応しているので、そのメッセージを拒否する（また、インタラクションＩＤ４１４に対応するインタラクションは失敗する）。
【００９９】
メッセージ４０４にインスタンスＩＤが含まれていないとき、メッセージ宛先４０２はオプションでＲＥＱＡＣＫＡＣＫ４０６を送信して、インタラクションＩＤ４１４に対応するインタラクションの進捗状況を要求することができる。メッセージ送信元４０１は、インタラクションＩＤ４１４、メッセージＩＤ４２４、およびインスタンスＩＤ４５２を含むＡＣＫＡＣＫ４０７で応答することができる。ＡＣＫＡＣＫ４０７から、メッセージ宛先４０２は、メッセージ４０４の追加のコピーを拒否すべきであること（および、インタラクションＩＤ４１４に対応するインタラクションを失敗させるべきであること）を判断することができる。さらに、ＲＥＱＡＣＫＡＣＫ４０６には、オプションでインスタンスＩＤ４６２を含めることができる。したがって、メッセージ送信元４０１は、新しいインタラクションの開始時にメッセージプロセッサインスタンス４５１のインスタンスＩＤを知ることができる。すなわち、ＲＥＱＡＣＫＡＣＫに宛先インスタンスＩＤが含まれるとき、送信元は宛先がリブートされたことを検出することができる。したがって、宛先が意図しないメモリ損失を受けたときも、多くても１回の送達が保証される。
【０１００】
一般に、複数のメッセージオフセットＩＤを確認応答（ＡＣＫおよびＡＣＫＡＣＫ）の中に含めることができることを理解されたい。例えば、確認応答には、インタラクションにおけるメッセージオフセットの範囲（例えば、１９〜２３）、インタラクションにおけるメッセージオフセットのリスト（例えば、１、４、１７）、またはインタラクションにおけるメッセージオフセットの範囲とリストの組合せ（例えば、３、７、１４〜１９、２２、２４〜２６）を含めることができる。（ＳＯＡＰ処理モデルなどを用いて）ＡＣＫおよびＲＥＱＡＣＫＡＣＫをメッセージヘッダとして定義することができ、したがってそれらを宛先から送信元に流れる任意のメッセージに添付することができることも理解されたい。同様に、ＡＣＫＡＣＫをメッセージヘッダとして定義して、それをメッセージ送信元から宛先に流れる任意のメッセージに添付することもできる。
【０１０１】
さらに、ＡＣＫＡＣＫメッセージは、（対応するＡＣＫが受信済みであるため、またはメッセージがタイムアウトしたために）それらのメッセージが確認応答を必要としないことをメッセージ宛先に指示するので、ＡＣＫＡＣＫメッセージを使用して確認応答範囲間の隙間（ｈｏｌｅｓ）を取り除くことができる。すなわち、ＡＣＫＡＣＫメッセージを使用することで、メッセージ宛先は確認応答範囲を合体させて単一の範囲でリストすることができる。例えば、メッセージ送信元は、メッセージＩＤ１〜１０、１３〜１５、および１７〜２０の範囲の確認応答を返すＡＣＫメッセージを受信したとする。続いて、メッセージ送信元で、メッセージＩＤ１１および１２が期限切れになったとする。したがって、メッセージＩＤ１１および１２の期限切れの後で受信したＲＥＱＡＣＫＡＣＫの応答では、送信されるＡＣＫＡＣＫに、メッセージＩＤ１〜１５、および１７〜２０がもはや確認応答を必要としなくなったことを指示することができる。したがって、ＡＣＫＡＣＫは確認応答のサイズを制限して、長く継続したインタラクションのために確認応答のサイズが継続的に増大することを防止することができる。
【０１０２】
例えば、ＴＴＬ値が無限大で、インスタンスＩＤが使用されていないときに、本発明の諸実施形態を正確に１回の送達のために使用することもできる。
【０１０３】
さらに、メッセージフロー２００、３００、および４００が、ネットワークを越えて、複数のコンピュータシステム間で任意の所与の時間に実施できることを理解されたい。例えば、コンピュータシステム１０２、１０３、１０４、１０６（およびネットワーク１０１に接続された他のコンピュータシステム）は各々、メッセージフロー２００、３００、４００の実施の一部として、コンピュータシステム１０７と（潜在的には同時に）メッセージ交換することができる。コンピュータシステム１０２、１０３、１０４、１０６（およびネットワーク１０１に接続された他のコンピュータシステム）は各々、メッセージフロー２００、３００、４００を、必要に応じて同時に、または異なる時間に実行することができる。さらに、コンピュータシステム１０２、１０３、１０４、１０６（およびネットワーク１０１に接続された他のコンピュータシステム）は各々、コンピュータシステム１０７との間で、複数のメッセージフロー２００、３００、４００を実行することができる。メッセージフロー２００、３００、および４００の各インスタンスは、異なるインタラクションＩＤに対応していることもある。
【０１０４】
図５は本発明の原理のための適切な動作環境を示す。図５および以下の論議は、本発明を実装することができる適切なコンピュータ環境について、簡潔かつ一般的に説明することを意図したものである。必須条件ではないが、本発明は、プログラムモジュールなど、コンピュータシステムによって実行されるコンピュータ実行可能な命令の一般的なコンテクストで説明される。一般に、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実装する、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能な命令、関連するデータ構造、およびプログラムモジュールは、本明細書で開示した方法の各動作を実行するためのプログラムコード手段の例を示すものである。
【０１０５】
図５を参照すると、本発明を実装するためのシステムの一例には、コンピュータシステム５２０の形の汎用コンピュータ装置が含まれる。コンピュータシステム５２０は、プロセシングユニット５２１、システムメモリ５２２、およびシステムバス５２３を含む。システムバス５２３は、システムメモリ５２２を含めた様々なシステムコンポーネントをプロセシングユニット５２１に結合する。プロセシングユニット５２１は、本発明の諸機能を含むコンピュータシステム５２０の諸機能を実行するように設計されたコンピュータ実行可能な命令を実行することができる。システムバス５２３は、メモリバスまたはメモリコントローラ、ペリフェラルバス、様々なバスアーキテクチャのいずれかを使用するローカルバスなど、いくつかの種類のバス構造のいずれかであってもよい。システムメモリは、読み出し専用メモリ（「ＲＯＭ」）５２４およびランダムアクセスメモリ（「ＲＡＭ」）５２５を含む。基本入出力システム（「ＢＩＯＳ」）５２６は、例えば起動時などに、コンピュータシステム５２０内の各要素間での情報転送を支援する基本ルーチンを含み、ＲＯＭ５２４に格納することができる。
【０１０６】
コンピュータシステム５２０はまた、磁気ハードディスク５３９に読み書きするための磁気ハードディスクドライブ５２７、リムーバブル磁気ディスク５２９に読み書きするための磁気ディスクドライブ５２８、例えばＣＤ−ＲＯＭや他の光媒体などのリムーバブル光ディスク５３１に読み書きするための光ディスクドライブ５３０を備えることもできる。磁気ハードディスクドライブ５２７、磁気ディスクドライブ５２８、および光ディスクドライブ５３０はそれぞれ、ハードディスクドライブインターフェース５３２、磁気ディスクドライブインターフェース５３３、および光ドライブインターフェース５３４によってシステムバス５２３に接続されている。各ドライブおよびそれに関連するコンピュータ読取可能の媒体は、コンピュータシステム５２０のためのコンピュータ実行可能な命令、データ構造、プログラムモジュール、その他のデータなどの不揮発性記憶を提供する。本明細書に記載の例示的環境では、磁気ハードディスク５３９、リムーバブル磁気ディスク５２９、およびリムーバブル光ディスク５３１を使用しているが、磁気カセット、フラッシュメモリカード、ＤＶＤ、ベルヌーイカートリッジ（Ｂｅｒｎｏｕｌｌｉ  ｃａｒｔｒｉｄｇｅ）、ＲＡＭ、ＲＯＭなど、データ記憶用の他の種類のコンピュータ読取可能媒体を使用することができる。
【０１０７】
１つまたは複数のプログラムモジュールを含むプログラムコード手段は、ハードディスク５３９、磁気ディスク５２９、光ディスク５３１、ＲＯＭ５２４、またはＲＡＭ５２５に格納することができる。また、プログラムコード手段には、オペレーティングシステム５３５、１つまたは複数のアプリケーションプログラム５３６、他のプログラムモジュール５３７、プログラムデータ５３８などが含まれる。ユーザは、キーボード５４０、ポインティングデバイス５４２、または他の入力装置（図示せず）、例えば、マイクロホン、ジョイスティック、ゲームパッド、スキャナなどを介して、コンピュータシステム５２０に命令および情報を入力することができる。これらおよび他の入力装置は、システムバス５２３に結合された入／出力インターフェース５４６を介してプロセシングユニット５２１に接続することができる。入／出力インターフェース５４６は、様々な異なるインターフェース、例えば、シリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ＵＳＢ（「Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ」）インターフェース、またはＩＥＥＥ（「Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ」）１３９４インターフェース（すなわち、ＦｉｒｅＷｉｒｅインターフェース）などを論理的に表す。また、様々なインターフェースの組合せを論理的に表すこともできる。
【０１０８】
モニタ５４７、その他の表示装置もまた、ビデオインターフェース５４８を介してシステムバス５２３に接続される。他の周辺出力装置（図示せず）、例えば、スピーカやプリンタなどをコンピュータシステム４２０に接続することもできる。
【０１０９】
コンピュータシステム５２０は、例えば、オフィス内または企業内コンピュータネットワーク、ホームネットワーク、イントラネット、および／またはインターネットなどのネットワークに接続可能である。コンピュータシステム５２０は、このようなネットワークを介して、例えば、リモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースなどの外部ソースとデータ交換することが可能である。
【０１１０】
コンピュータシステム５２０はネットワークインターフェース５５３を備え、コンピュータシステム５２０は、それを介して外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。図５に示したように、ネットワークインターフェース５５３は、リンク５５１を介してリモートコンピュータシステム５８３とのデータの交換を容易にできるようにする。ネットワークインターフェース５５３は、１つまたは複数のソフトウェアおよび／またはハードウェアモジュール、例えば、ネットワークインターフェースカードや対応するネットワークドライバインターフェース規約（「ＮＤＩＳ」）スタックなどを論理的に表すことができる。リンク５５１はネットワークの一部（例えば、イーサネット（登録商標）セグメント）を表し、リモートコンピュータシステム５８３はネットワークのノードをあらわす。
【０１１１】
同様に、コンピュータシステム５２０は入／出力インターフェース５４６を備え、コンピュータシステム５２０は、それを介して外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。入／出力インターフェース５４６はリンク５５９を介してモデム５５４（例えば、標準モデム、ケーブルモデム、あるいは「ＤＳＬ」（ｄｉｇｉｔａｌ  ｓｕｂｓｃｒｉｂｅｒ  ｌｉｎｅ）モデムなど）に結合され、コンピュータシステム５２０は、それを介して外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。図５に示したように、入／出力インターフェース５４６およびモデム５５４は、リンク５５２を介してリモートコンピュータシステム５９３とのデータ交換を容易にできるようにする。リンク５５２はネットワークの一部を表し、リモートコンピュータシステム４９３はネットワークのノードを表す。
【０１１２】
図５は本発明の適切な動作環境を表すものであるが、本発明の原理は、必要な場合には適切な修正を施して、本発明の原理を実装できる任意のシステムで使用することができる。図５に示した環境は例示のためだけのものであり、本発明の原理を実装することができる多様な環境の一部を表すものでは決してない。
【０１１３】
本発明によれば、メッセージプロセッサインスタンスおよびクロック、ならびに関連するデータ、例えば、インタラクションＩＤ、メッセージＩＤ、ＴＴＬ値、インスタンスＩＤ、カウント、データ、インタラクションキャッシュなどを含む各モジュールは、コンピュータシステム５２０に関連する任意のコンピュータ読取可能の媒体に格納し、それにアクセスすることができる。例えば、そのようなモジュールの一部および関連するプログラムデータの一部は、オペレーティングシステム５３５、アプリケーションプログラム５３６、プログラムモジュール５３７、および／またはプログラムデータ５３８に含めることができ、システムメモリ５２２に記憶することができる。
【０１１４】
例えば、磁気ハードディスク５３９などの大容量記憶装置がコンピュータシステム５２０に結合されているときは、この様なモジュールおよび関連するプログラムデータを大容量記憶装置に格納することもできる。ネットワーク環境においては、コンピュータシステム５２０に関連して、またはそのシステムの一部として描かれたプログラムモジュールは、リモートのメモリ記憶装置、例えば、リモートコンピュータシステム５８３および／またはリモートコンピュータシステム５９３に関連する、システムメモリおよび／または大容量記憶装置に格納することができる。そのようなモジュールの実行は、先に説明した分散環境で実施することができる。
【０１１５】
本発明は、その趣旨および本質的特性から逸脱することなく、他の特定の形態で実施することができる。記載の実施形態は、あらゆる点で単に例として示したものであり、限定的なものだと見なすべきではない。したがって、本発明の範囲は、上述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意味および範囲に含まれる変形形態はすべて、それら特許請求の範囲に含まれるものとする。
【図面の簡単な説明】
【０１１６】
【図１】同期レートのクロックを使用する高信頼メッセージングを容易にするコンピュータアーキテクチャの一例を示す図である。
【図２】メッセージ宛先のインタラクションキャッシュでメッセージＩＤが保持されるときに、メッセージングを高信頼に処理することを容易にするメッセージフローの第１の例を示す図である。
【図３】メッセージ宛先のインタラクションキャッシュからメッセージＩＤが消去されたときに、メッセージングを高信頼に処理することを容易にするメッセージフローの第２の例を示す図である。
【図４】メッセージ宛先が意図しないメモリ損失を受けたときに、メッセージングを高信頼に処理することを容易にするメッセージフローの第３の例を示す図である。
【図５】本発明の原理に対する適切な動作環境を示す図である。
【図６】メッセージ送信元が高信頼にメッセージを送達する方法の流れ図の一例を示す図である。
【図７】メッセージ宛先が高信頼にメッセージを処理する方法の流れ図の一例を示す図である。
【符号の説明】
【０１１７】
１００  コンピュータアーキテクチャ
１０１  ネットワーク
１０２  コンピュータシステム
１０３  コンピュータシステム
１０４  コンピュータシステム
１０６  コンピュータシステム
１０７  コンピュータシステム
１１２  クロック
１１３  クロック
１１４  クロック
１１６  クロック
１１７  クロック
１２２  インタラクションキャッシュ（Ｉｎｔｅｒａｃｔｉｏｎ  Ｃａｃｈｅ）
１２３  インタラクションキャッシュ
１２４  インタラクションキャッシュ
１２６  インタラクションキャッシュ
１２７  インタラクションキャッシュ
１３７  メッセージ処理インスタンス
１５１  メッセージ
１５２  インタラクションＩＤ
１５３  カウント
１５４  ＴＴＬ値
１７１  ＡｃｋＡｃｋ
１７２  インスタンスＩＤ
２００  メッセージフロー
２０１  メッセージ送信元
２０２  メッセージ宛先
２０３  クロックレート
２０４  メッセージ
２１４  インタラクションＩＤ
２２４  メッセージＩＤ
２３４  ＴＴＬ値
２３５  ＴＴＬ値
２３６  メッセージプロセッサインスタンス
２３７  インタラクションキャッシュ（Ｉｎｔｅｒａｃｔｉｏｎ  Ｃａｃｈｅ）
２３９  タイマ
２４１  タイマ継続時間
２４２  タイマ継続時間
２４４  データ
２４９  タイマ
２５１  タイマ継続時間
２５２  タイマ継続時間
３００  メッセージフロー
３０１  メッセージ送信元
３０２  メッセージ宛先
３０３  クロックレート
３０４  メッセージ
３０６  ＲｅｑＡｃｋＡｃｋ
３０７  ＡｃｋＡｃｋ
３０８  Ａｃｋメッセージ
３１４  インタラクションＩＤ
３２４  メッセージＩＤ
３２７  インタラクションキャッシュ（Ｉｎｔｅｒａｃｔｉｏｎ  Ｃａｃｈｅ）
３３４  ＴＴＬ値
３３５  ＴＴＬ値
３３６  メッセージプロセッサインスタンス
３３７  インタラクションキャッシュ（Ｉｎｔｅｒａｃｔｉｏｎ  Ｃａｃｈｅ）
３３９  タイマ
３４１  タイマ継続時間
３４４  データ
３４９  タイマ
３５１  タイマ継続時間
４００  メッセージフロー
４０１  メッセージ送信元
４０２  メッセージ宛先
４０３  クロックレート
４０４  メッセージ
４０６  ＲｅｑＡｃｋＡｃｋ
４０７  ＡｃｋＡｃｋ
４１４  インタラクションＩＤ
４２４  メッセージＩＤ
４３７  インタラクションキャッシュ（Ｉｎｔｅｒａｃｔｉｏｎ  Ｃａｃｈｅ）
４４４  データ
４５１  メッセージプロセッサインスタンス
４５２  インスタンスＩＤ
４６２  インスタンスＩＤ
５２０  コンピュータシステム
５２１  プロセシングユニット
５２２  システムメモリ
５２３  システムバス
５２７  磁気ハードディスクドライブ
５２８  磁気ディスクドライブ
５２９  リムーバブル磁気ディスク
５３０  光ディスクドライブ
５３１  リムーバブル光ディスク
５３２  ハードディスクドライブインターフェース
５３３  磁気ディスクドライブインターフェース
５３４  光ドライブインターフェース
５３５  オペレーティングシステム
５３６  アプリケーションプログラム
５３７  他のプログラムモジュール
５３８  プログラムデータ
５３９  磁気ハードディスク
５４０  キーボード
５４６  入／出力インターフェース
５４７  モニタ
５４８  ビデオインターフェース
５５１  リンク
５５２  リンク
５５３  ネットワークインターフェース
５５４  モデム
５８３  リモートコンピュータ
５９３  リモートコンピュータ
【図１】
2006094510.tif 000003
【図２】
2006094510.tif 000004
【図３】
2006094510.tif 000005
【図４】
2006094510.tif 000006
【図５】
2006094510.tif 000007
【図６】
2006094510.tif 000008
【図７】
2006094510.tif 000009