(57)【要約】【課題】Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ（ＳＯＡＰ）を用いて、例えばメソッド呼出パラメータ等の型付きオブジェクトを交換する。【解決手段】コンピュータシステムが、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする。型付きオブジェクトは、メッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされる。メッセージコントラクト属性は、型付きオブジェクトパラメータと、対応するＳＯＡＰ要素との間のマッピングを定義する。コンピュータシステムは、メッセージコントラクト属性を利用して型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングし、ＳＯＡＰ要素をＳＯＡＰエンベロープに挿入する。受信側コンピュータシステムが、ＳＯＡＰ要素にアクセスし、メッセージコントラクト属性を利用してＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングして戻す。【選択図】図１
2006164264.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに１つまたは複数の他のコンピュータシステムとともにネットワーク接続可能なコンピュータシステムで、型付きアプリケーションデータをフレキシブルに送信する方法において、
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする行為であって、前記型付きオブジェクトはメッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされ、前記１つまたは複数のメッセージコントラクト属性は型付きオブジェクトパラメータと対応するＳＯＡＰ（シンプル・オブジェクト・アクセス・プロトコル）要素との間のマッピングを定義する、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする行為と、
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングする行為と、
前記１つまたは複数のメッセージコントラクト属性を参照することによりＳＯＡＰエンベロープ内の位置を識別する行為と、
前記ＳＯＡＰエンベロープ内の前記識別した位置に前記ＳＯＡＰ要素を挿入する行為と
を含むことを特徴とする、型付きアプリケーションデータをフレキシブルに送信する方法。
【請求項２】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、メソッドへのパラメータを表すクラスにアクセスする行為を含むことを特徴とする請求項１に記載の方法。
【請求項３】
メソッドへのパラメータを表すクラスにアクセスする前記行為が、共通言語ランタイムメソッドへのパラメータを表すパブリッククラスにアクセスする行為を含むことを特徴とする請求項２に記載の方法。
【請求項４】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、アクションＵＲＩで注釈付けされた型付きオブジェクトにアクセスする行為を含むことを特徴とする請求項１に記載の方法。
【請求項５】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、メソッド戻り値を表すクラスにアクセスする行為を含むことを特徴とする請求項１に記載の方法。
【請求項６】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、ＳＯＡＰ要素の共通言語ランタイム表現にアクセスする行為を含むことを特徴とする請求項１に記載の方法。
【請求項７】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、型付きメッセージにアクセスする行為を含むことを特徴とする請求項１に記載の方法。
【請求項８】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、注釈付けされた型付きオブジェクトパラメータにアクセスする行為を含み、前記注釈付けされた型付きオブジェクトパラメータは、該型付きオブジェクトパラメータのＸＭＬ表現がＳＯＡＰエンベロープヘッダに含まれるべきことを示すメッセージコントラクト属性で注釈付けされることを特徴とする請求項１に記載の方法。
【請求項９】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、注釈付けされた型付きオブジェクトパラメータにアクセスする行為を含み、前記注釈付けされた型付きオブジェクトパラメータは、該型付きオブジェクトパラメータのＸＭＬ表現がＳＯＡＰエンベロープボディに含まれるべきことを示すメッセージコントラクト属性で注釈付けされることを特徴とする請求項１に記載の方法。
【請求項１０】
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする前記行為が、注釈付けされた型付きオブジェクトパラメータにアクセスする行為を含み、前記注釈付けされた型付きオブジェクトパラメータは、１つまたは複数のメッセージコントラクト属性で注釈付けされ、該１つまたは複数のメッセージコントラクト属性は、ＳＯＡＰエンベロープ内の位置、名前、名前空間ＵＲＩ、型付きオブジェクトパラメータが理解されなければならないかどうか、型付きオブジェクトパラメータが中継されなければならないかどうか、および型付きオブジェクトパラメータの行為、を示す属性のうちから選択されることを特徴とする請求項１に記載の方法。
【請求項１１】
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングする前記行為が、前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にシリアライズ（直列化）する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングする前記行為が、前記アクセスした型付きオブジェクトパラメータを対応するＸＭＬ要素にマッピングする行為を含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記１つまたは複数のメッセージコントラクト属性を参照することによりＳＯＡＰエンベロープ内の位置を識別する前記行為が、ＳＯＡＰエンベロープのヘッダ部分を識別するメッセージコントラクト属性を参照する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１４】
前記１つまたは複数のメッセージコントラクト属性を参照することによりＳＯＡＰエンベロープ内の位置を識別する前記行為が、ＳＯＡＰエンベロープのボディ部分を識別するメッセージコントラクト属性を参照する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１５】
前記ＳＯＡＰエンベロープ内の前記識別した位置に前記ＳＯＡＰ要素を挿入する前記行為が、対応するＸＭＬ命令を前記ＳＯＡＰエンベロープのヘッダ部分に挿入する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１６】
前記ＳＯＡＰエンベロープ内の前記識別した位置に前記ＳＯＡＰ要素を挿入する前記行為が、対応するＸＭＬ命令を前記ＳＯＡＰエンベロープのボディ部分に挿入する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１７】
前記ＳＯＡＰエンベロープを生オクテットにエンコードする行為と、
受信側コンピュータシステムへ前記生オクテットを送信する行為と
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１８】
前記ＳＯＡＰエンベロープを生オクテットにエンコードする前記行為が、生オクテットのサイズに所定の制限を持たない生オクテットに前記ＳＯＡＰエンベロープをエンコードする行為を含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記ＳＯＡＰエンベロープを生オクテットにエンコードする前記行為が、前記ＳＯＡＰエンベロープのテキストベースのエンコーディングをもたらす行為を含むことを特徴とする請求項１７に記載の方法。
【請求項２０】
前記ＳＯＡＰエンベロープを生オクテットにエンコードする前記行為が、Message-Transmission Optimization Mechanism(メッセージ送信最適化メカニズム)を用いることにより前記ＳＯＡＰエンベロープをエンコードする行為を含むことを特徴とする請求項１７に記載の方法。
【請求項２１】
前記ＳＯＡＰエンベロープを生オクテットにエンコードする前記行為が、前記ＳＯＡＰエンベロープのバイナリベースのエンコーディングをもたらす行為を含むことを特徴とする請求項１７に記載の方法。
【請求項２２】
前記ＳＯＡＰエンベロープのバイナリベースのエンコーディングをもたらす前記行為は、前記ＳＯＡＰエンベロープがより効率的に転送されるように、１つまたは複数のＳＯＡＰタームおよび／またはＸＭＬタームを、長さを短縮した代替言語で置換する行為を含むことを特徴とする請求項２１に記載の方法。
【請求項２３】
受信側コンピュータシステムへ前記生オクテットを送信する前記行為が、前記受信側コンピュータシステムへ前記生オクテットをストリーミングする行為を含むことを特徴とする請求項１７に記載の方法。
【請求項２４】
ネットワークに１つまたは複数の他のコンピュータシステムとともにネットワーク接続可能なコンピュータシステムで、型付きアプリケーションデータをフレキシブルに受信する方法において、
ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスする行為と、
前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別する行為であって、前記型付きオブジェクトはメッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされ、前記１つまたは複数のメッセージコントラクト属性はＳＯＡＰ要素と対応する型付きオブジェクトパラメータとの間のマッピングを定義する、前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別する行為と、
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする行為であって、前記型付きオブジェクトパラメータは前記識別した型付きオブジェクトに実行依頼される、前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする行為と
を含むことを特徴とする、型付きアプリケーションデータをフレキシブルに受信する方法。
【請求項２５】
送信側コンピュータシステムから生オクテットを受信する行為と、
前記生オクテットを前記ＳＯＡＰエンベロープにデコードする行為と
をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項２６】
送信側コンピュータシステムから生オクテットを受信する前記行為が、ストリーミングされた生オクテットを受信する行為を含むことを特徴とする請求項２５に記載の方法。
【請求項２７】
前記生オクテットを前記ＳＯＡＰエンベロープにデコードする前記行為が、前記ＳＯＡＰエンベロープのテキストベースのエンコーディングをデコードする行為を含むことを特徴とする請求項２５に記載の方法。
【請求項２８】
前記生オクテットを前記ＳＯＡＰエンベロープにデコードする前記行為が、前記ＳＯＡＰエンベロープのバイナリベースのエンコーディングをデコードする行為を含むことを特徴とする請求項２５に記載の方法。
【請求項２９】
前記ＳＯＡＰエンベロープのバイナリベースのエンコーディングをデコードする前記行為は、前記ＳＯＡＰエンベロープが前の設定に戻るように、長さを短縮した代替言語を元のＳＯＡＰタームおよび／またはＸＭＬタームで置換する行為を含むことを特徴とする請求項２８に記載の方法。
【請求項３０】
前記生オクテットを前記ＳＯＡＰエンベロープにデコードする前記行為が、Message-Transmission Optimization Mechanism(メッセージ送信最適化メカニズム)を用いることにより前記生オクテットをデコードする行為を含むことを特徴とする請求項２５に記載の方法。
【請求項３１】
ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスする前記行為が、前記ＳＯＡＰエンベロープのヘッダ部分からＸＭＬ要素にアクセスする行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３２】
ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスする前記行為が、前記ＳＯＡＰエンベロープのボディ部分からＸＭＬ要素にアクセスする行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３３】
前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別する前記行為が、前記ＳＯＡＰエンベロープ内のＸＭＬ要素を注釈付きクラスのメッセージコントラクト属性と比較する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３４】
前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別する前記行為が、前記型付きオブジェクトに対応するＵＲＩにアクセスする行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３５】
前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別する前記行為が、メソッドへのパラメータを表すクラスを識別する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３６】
メソッドへのパラメータを表すクラスを識別する前記行為が、共通言語ランタイムメソッドへのパラメータを表すパブリッククラスにアクセスする行為を含むことを特徴とする請求項３５に記載の方法。
【請求項３７】
前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別する前記行為が、前記ＳＯＡＰエンベロープを適合したメソッドにディスパッチする行為を含むことを特徴とする請求項３５に記載の方法。
【請求項３８】
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする前記行為が、前記ＳＯＡＰ要素を型付きオブジェクトパラメータにデシリアライズ（非直列化）する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３９】
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする前記行為が、ＸＭＬ要素を対応する型付きオブジェクトパラメータにマッピングする行為を含むことを特徴とする請求項２４に記載の方法。
【請求項４０】
前記型付きオブジェクトパラメータでメソッドを呼び出す行為
をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項４１】
ネットワークに１つまたは複数の他のコンピュータシステムとともにネットワーク接続可能なコンピュータシステムで用いるためのコンピュータプログラムにおいて、該コンピュータプログラムは型付きアプリケーションデータをフレキシブルに送信する方法を実施し、該コンピュータプログラムは、プロセッサによる実行時に前記コンピュータシステムに下記、すなわち
型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスすることであって、前記型付きオブジェクトはメッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされ、前記１つまたは複数のメッセージコントラクト属性は型付きオブジェクトパラメータと対応するＳＯＡＰ要素との間のマッピングを定義する、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスすること、
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングすること、
前記１つまたは複数のメッセージコントラクト属性を参照することによりＳＯＡＰエンベロープ内の位置を識別すること、および
前記ＳＯＡＰエンベロープ内の前記識別した位置に前記ＳＯＡＰ要素を挿入すること
を実行させる、コンピュータ実行可能命令を含み、１つまたは複数のコンピュータ可読媒体に格納されることを特徴とするコンピュータプログラム。
【請求項４２】
実行時に、前記コンピュータシステムに、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスさせるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに共通言語ランタイムメソッドへのパラメータを表すパブリッククラスにアクセスさせるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４３】
実行時に、前記コンピュータシステムに、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスさせるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに共通言語ランタイムメソッド戻り値を表すパブリッククラスにアクセスさせるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４４】
実行時に、前記コンピュータシステムに、前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングさせるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にシリアライズさせるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４５】
実行時に、前記コンピュータシステムに、前記１つまたは複数のメッセージコントラクト属性を参照することによりＳＯＡＰエンベロープ内の位置を識別させるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰエンベロープのヘッダ部分を識別するメッセージコントラクト属性を参照させるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４６】
実行時に、前記コンピュータシステムに、前記１つまたは複数のメッセージコントラクト属性を参照することによりＳＯＡＰエンベロープ内の位置を識別させるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰエンベロープのボディ部分を識別するメッセージコントラクト属性を参照させるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４７】
実行時に、前記コンピュータシステムに、前記ＳＯＡＰエンベロープ内の前記識別した位置に前記ＳＯＡＰ要素を挿入させるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰ要素を前記ＳＯＡＰエンベロープのヘッダ部分に挿入させるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４８】
実行時に、前記コンピュータシステムに、前記ＳＯＡＰエンベロープ内の前記識別した位置に前記ＳＯＡＰ要素を挿入させるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰ要素を前記ＳＯＡＰエンベロープのボディ部分に挿入させるコンピュータ実行可能命令を含むことを特徴とする請求項４１に記載のコンピュータプログラム。
【請求項４９】
ネットワークに１つまたは複数の他のコンピュータシステムとともにネットワーク接続可能なコンピュータシステムで用いるためのコンピュータプログラムにおいて、該コンピュータプログラムは型付きアプリケーションデータをフレキシブルに受信する方法を実施し、該コンピュータプログラムは、プロセッサによる実行時に前記コンピュータシステムに下記、すなわち
ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスすること、
前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別することであって、前記型付きオブジェクトはメッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされ、前記１つまたは複数のメッセージコントラクト属性はＳＯＡＰ要素と対応する型付きオブジェクトパラメータとの間のマッピングを定義する、前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別すること、および
前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングすることであって、前記型付きオブジェクトパラメータは前記識別した型付きオブジェクトに実行依頼される、前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングすること
を実行させるコンピュータ実行可能命令を含み、１つまたは複数のコンピュータ可読媒体に格納されることを特徴とするコンピュータプログラム。
【請求項５０】
実行時に、前記コンピュータシステムに、ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスさせるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰエンベロープのヘッダ部分のＸＭＬ要素にアクセスさせるコンピュータ実行可能命令を含むことを特徴とする請求項４９に記載のコンピュータプログラム。
【請求項５１】
実行時に、前記コンピュータシステムに、ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスさせるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰエンベロープのボディ部分のＸＭＬ要素にアクセスさせるコンピュータ実行可能命令を含むことを特徴とする請求項４９に記載のコンピュータプログラム。
【請求項５２】
実行時に、前記コンピュータシステムに、前記ＳＯＡＰ要素に対応する型付きオブジェクトを識別させるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記型付きオブジェクトに対応するＵＲＩにアクセスさせるコンピュータ実行可能命令を含むことを特徴とする請求項４９に記載のコンピュータプログラム。
【請求項５３】
実行時に、前記コンピュータシステムに、前記１つまたは複数のメッセージコントラクト属性に従って前記アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングさせるコンピュータ実行可能命令が、実行時に前記コンピュータシステムに前記ＳＯＡＰ要素を型付きオブジェクトパラメータにデシリアライズさせるコンピュータ実行可能命令を含むことを特徴とする請求項４９に記載のコンピュータプログラム。
【請求項５４】
請求項４１乃至５３のいずれかの項に記載のコンピュータプログラムを格納したことを特徴とする１つまたは複数のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は電子メッセージングに関し、より詳細には、型付き（typed:「型付けされた」とも称されている）アプリケーションデータをフレキシブルに転送することに関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連技術は社会の多くの側面に影響を及ぼす。実際、コンピュータシステムの情報処理能力は、われわれの生活および仕事の仕方を変えた。現在、コンピュータシステムは、コンピュータシステムの出現前には手作業で実行していた多数のタスク（例えばワードプロセッシング、スケジューリング、およびデータベース管理）を普通に実行している。最近では、コンピュータシステムは互いに、および他の電子機器と結合することにより、有線および無線の両方のコンピュータネットワークを形成し、これを通じてコンピュータシステムおよび他の電子機器は電子データを転送することができる。その結果、あるコンピュータシステムで実行される多くのタスク（例えば音声通信、電子メールアクセス、家庭用電子機器（家電）の制御、ウェブ閲覧、および文書印刷）は、いくつかのコンピュータシステムおよび／または他の電子機器の間で有線および／または無線のコンピュータネットワークを通じて電子メッセージを交換することを含む。
【０００３】
実際、ネットワークが非常に多くなったために、簡単なネットワーク対応コンピューティングシステムが、「インターネット」と通常呼ばれるネットワークの集合体を通じて、世界中に広がった他の数百万のコンピューティングシステムのいずれとも通信することができる。このようなコンピューティングシステムとしては、デスクトップ型（卓上型）、ラップトップ型（ノート型）、またはタブレット型のパーソナルコンピュータ、携帯情報端末（ＰＤＡ）、電話機、あるいはディジタルネットワークを通じて通信可能なその他の任意のコンピュータまたはデバイスが挙げられる。
【０００４】
ネットワークを通じて通信するためには、あるコンピューティングシステム（本明細書において「送信側コンピューティングシステム」という）が電子メッセージを作成し、さもなければ電子メールにアクセスし、ネットワークを通じてその電子メッセージを別のコンピューティングシステム（本明細書において「受信側コンピューティングシステム」という）へ送信する。電子メッセージは、電子メールやインスタントメッセージである場合などには人間のユーザによって読まれることもあり、あるいは、その代わりに受信側コンピューティングシステム上で動作するアプリケーションによって読まれることもある。電子メッセージは、場合によっては人間のユーザの支援の下で、送信側コンピューティングシステム上で動作するアプリケーションによって作成されてもよい。
【０００５】
したがって、環境によっては、メッセージが分散アプリケーション間で交換され、直接のユーザインタラクションはあるとしてもわずかである。分散アプリケーション（例えばウェブサービス）間でメッセージを交換するために用いられるプロトコルの１つにＳｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ（シンプル・オブジェクト・アクセス・プロトコル）（ＳＯＡＰ）がある。ＳＯＡＰは、分散・非集中環境において情報を交換することを目的とした軽量プロトコルである。ＳＯＡＰは、ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ：拡張マークアップ言語）技術を用いて、メッセージコンストラクト（構成）を提供する拡張可能なメッセージングフレームワーク（骨格）を定義する。このメッセージコンストラクトは、例えば、Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＳＭＴＰ：サイバー間通信プロトコル）、ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ：ハイパーテキスト転送プロトコル；クライアントがサーバと通信するためのプロトコル）、Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ（ＵＤＰ：ユーザー・データグラム・プロトコル）、Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ（ＴＣＰ：通信制御プロトコル）、および名前付きパイプ（named pipes）のような、基礎となるさまざまなプロトコル上で交換されることが可能である。ＳＯＡＰメッセージは、メッセージヘッダおよびメッセージボディ（本文、主部）のセットを有するＳＯＡＰインフォセット(infoset)（例えばＸＭＬ要素）として拡張可能な形で定義することができる。
【０００６】
多くのアプリケーションが、メソッドおよび／またはオブジェクト指向プログラミングモデルを用いて設計されている。このようなプログラミングモデルは、しばしば、型データフォーマット（例えば、整数型、ストリング型、論理型、あるいはユーザ定義型のデータフォーマット）を用いることにより、モジュール間でオブジェクトを交換する。例えば、メソッドは、入力として、１つまたは複数の型付きオブジェクト（型付けされたオブジェクト、あるいはタイプトオブジェクトとも云う）（例えば種々の異なるデータ型フォーマットのパラメータ）を受け取ることができる。これに応じて、メソッドは、その型付きオブジェクトに対する（潜在的に異なる）値を生成して出力することができ、あるいは、異なるデータ型（例えばそのメソッドのデータ型）の型付きオブジェクトを返すことができる。型付きデータフォーマットの使用が有利であるのは、それによって開発者が、アプリケーションおよび／またはモジュールの機能に基づいて、より適切な、および／またはより効率的なデータ型を使用するアプリケーションおよびモジュールを設計することが可能となるからである。
【０００７】
したがって、分散アプリケーション環境では、型付きオブジェクトがある一つの分散アプリケーションの相異なる部分の間で交換されることになるかもしれない。例えば、銀行（バンキング）取引を容易にするため、分散バンキングクライアントが分散バンキングサーバとの間で型付きバンキング取引データ構造を交換することができる。しかし、ＳＯＡＰメッセージのフレキシビリティとともに型付きデータフォーマットの利点を活用した分散アプリケーションを設計することは困難なことがある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ＳＯＡＰは拡張可能なプロトコルなので、アプリケーションおよび／またはユーザデータからＳＯＡＰメッセージへの、およびその逆のマッピングに対して実質的には何ら条件を課さない。そのため、型付きオブジェクト（例えば共通言語ランタイム（ＣＬＲ）型）を対応するＳＯＡＰメッセージにマッピングするため、およびＳＯＡＰメッセージを対応する型付きオブジェクトにマッピングするためのメカニズムは、あるとしても制限される。型付きオブジェクトとＳＯＡＰメッセージの間で有意味にマッピングが行えないと、分散アプリケーションがアプリケーションおよび／またはユーザデータを交換することはより困難になり、不可能にさえなり得る。
【０００９】
さらに、ＳＯＡＰメッセージを生（未加工）オクテット（８ビット単位の情報）にエンコードするための通常のメカニズムは、ＳＯＡＰメッセージのサイズを制限し、使用可能なエンコーダのタイプを制限する。したがって、型付きアプリケーションデータをフレキシブルに転送するためのシステム、方法、およびコンピュータプログラム製品があれば都合がよい。
【課題を解決するための手段】
【００１０】
上記の従来技術の課題は本発明の原理によって克服される。本発明は、型付きアプリケーションデータをフレキシブルに転送するための方法、システム、およびコンピュータプログラム製品に関する。いくつかの実施形態において、コンピュータシステムが、型付きデータを送信するためのＳＯＡＰメッセージを構成する。アプリケーションコード（例えばクライアントプロキシ）が型付きオブジェクトパラメータ（例えばメソッド呼出へのパラメータ）とともに型付きオブジェクト（例えばメソッド）を呼び出す。コンピュータシステムは、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする。型付きオブジェクトは、メッセージコントラクトモデル（メッセージ規約モデル）の１つまたは複数のメッセージコントラクト属性で注釈付けされる。この１つまたは複数のメッセージコントラクト属性は、型付きオブジェクトパラメータと、対応するＳＯＡＰ要素との間のマッピングを定義する。
【００１１】
コンピュータシステムは、上記１つまたは複数のメッセージコントラクト属性に従って、アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングする。コンピュータシステムは、上記１つまたは複数のメッセージコントラクト属性を参照することにより、ＳＯＡＰエンベロープ内の位置（例えばメッセージヘッダあるいはメッセージボディ）を識別する。コンピュータシステムは、ＳＯＡＰエンベロープ内の識別した位置にＳＯＡＰ要素を挿入する。その後、ＳＯＡＰエンベロープを、チャネルに送出し、対応する生オクテットにエンコードすることができ、その対応する生オクテットを別のコンピュータシステムへ転送することができる。
【００１２】
他の実施形態において、コンピュータシステムが、ＳＯＡＰメッセージから型付きデータを取得する。コンピュータシステムは、別のコンピュータシステムから生オクテットを受け取り、その生オクテットを対応するＳＯＡＰエンベロープにデコードし、ＳＯＡＰエンベロープをチャネルに送出することができる。コンピュータシステムは、ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスする。
【００１３】
コンピュータシステムは、ＳＯＡＰ要素に対応する型付きオブジェクトを識別する。型付きオブジェクトは、メッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされる。この１つまたは複数のメッセージコントラクト属性は、ＳＯＡＰ要素と、対応する型付きオブジェクトパラメータとの間のマッピングを定義する。コンピュータシステムは、上記１つまたは複数のメッセージコントラクト属性に従って、アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする。型付きオブジェクトパラメータは、識別した型付きオブジェクトを含むアプリケーションコード（例えばサービス）に実行依頼（サブミット）される。
【００１４】
本発明のこれらおよびその他の目的および特徴は、以下の説明および添付の特許請求の範囲からさらに十分に明らかとなるであろうし、あるいは以下に記載される本発明を実施することで知られるであろう。
【００１５】
本発明の上記およびその他の利点・効果および特徴をさらに明確にするため、本発明のより詳細な説明が、添付図面に示されるその具体的実施形態を参照することによって行われる。これらの図面は本発明の典型的な実施形態を示しているだけであり、したがってその範囲を限定するものと解釈してはならないと理解されたい。本発明は、添付図面を用いることにより、さらに具体的かつ詳細に記載され説明される。
【発明を実施するための最良の形態】
【００１６】
上記の従来技術の課題は本発明の原理によって克服される。本発明は、型付きアプリケーションデータをフレキシブルに転送するための方法、システム、およびコンピュータプログラム製品（コンピュータプログラムとコンピュータ可読媒体を含む）に関する。いくつかの実施形態において、コンピュータシステムが、型付きデータを送信するためのＳＯＡＰメッセージを設定する。アプリケーションコード（例えばクライアントプロキシ）が型付きオブジェクトパラメータ（例えばメソッド呼出へのパラメータ）とともに型付きオブジェクト（例えばメソッド）を呼び出す。コンピュータシステムは、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする。型付きオブジェクトは、メッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされる。この１つまたは複数のメッセージコントラクト属性は、型付きオブジェクトパラメータと、対応するＳＯＡＰ要素との間のマッピングを定義する。
【００１７】
コンピュータシステムは、上記１つまたは複数のメッセージコントラクト属性に従って、アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングする。コンピュータシステムは、上記１つまたは複数のメッセージコントラクト属性を参照することにより、ＳＯＡＰエンベロープ内の位置（例えばメッセージヘッダあるいはメッセージボディ）を識別する。コンピュータシステムは、ＳＯＡＰエンベロープ内の識別した位置にＳＯＡＰ要素を挿入する。その後、ＳＯＡＰエンベロープを、チャネルに送出し、対応する生オクテットにエンコード（符号化）することができ、その対応する生オクテットを別のコンピュータシステムへ転送することができる。
【００１８】
他の実施形態において、コンピュータシステムが、ＳＯＡＰメッセージから型付きデータを取得する。コンピュータシステムは、別のコンピュータシステムから生オクテットを受け取り、その生オクテットを対応するＳＯＡＰエンベロープにデコードし、ＳＯＡＰエンベロープをチャネルに送出することができる。コンピュータシステムは、ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスする。
【００１９】
コンピュータシステムは、ＳＯＡＰ要素に対応する型付きオブジェクトを識別する。型付きオブジェクトは、メッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性で注釈付けされる。この１つまたは複数のメッセージコントラクト属性は、ＳＯＡＰ要素と、対応する型付きオブジェクトパラメータとの間のマッピングを定義する。コンピュータシステムは、上記１つまたは複数のメッセージコントラクト属性に従って、アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする。型付きオブジェクトパラメータは、識別した型付きオブジェクトを含むアプリケーションコード（例えばサービス）に実行依頼される。
【００２０】
本発明の範囲内にある実施形態としては、コンピュータ実行可能命令またはデータ構造を伝送あるいは格納するコンピュータ可読媒体がある。このようなコンピュータ可読媒体は、汎用または専用のコンピュータシステムによってアクセス可能な、いかなる利用可能な媒体であってもよい。例として、限定ではないが、このようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭ等の光ディスクストレージ、磁気ディスクストレージ等の磁気記憶装置のような物理記憶媒体、または、コンピュータ実行可能命令、コンピュータ可読命令、もしくはデータ構造の形態で所望のプログラムコード手段を伝送または格納するために使用可能であり、汎用もしくは専用のコンピュータシステムによってアクセス可能な任意の他の媒体をも含み得る。
【００２１】
本明細書および添付の特許請求の範囲において、「ネットワーク」は、コンピュータシステムおよび／またはモジュールの間で電子データのトランスポートを可能にする１つまたは複数のデータリンクとして定義される。情報がネットワークまたは他の通信コネクション（通信接続）（有線、無線、または有線・無線の組合せのいずれでもよい）を通じて転送あるいは提供される場合、そのコネクションは当然にコンピュータ可読媒体とみなされる。したがって、いかなるこのようなコネクションも当然にコンピュータ可読媒体と呼称される。上記のものの組合せもまた、コンピュータ可読媒体の範囲内に含まれるものとする。コンピュータ実行可能命令としては、例えば、汎用コンピュータシステムまたは専用コンピュータシステムに、ある特定の機能（ファンクション）または機能群を実行させる命令およびデータがある。コンピュータ実行可能命令は、例えば、バイナリであっても、アセンブリ言語のような中間フォーマット命令であっても、さらにはソースコードであってもよい。
【００２２】
本明細書および添付の特許請求の範囲において、「コンピュータシステム」は、電子データに対するオペレーションを実行するために協働する１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはそれらの組合せとして定義される。例えば、コンピュータシステムの定義は、パーソナルコンピュータのハードウェアコンポーネントも、パーソナルコンピュータのオペレーティングシステムのようなソフトウェアモジュールも含む。モジュールの物理的配置は重要でない。コンピュータシステムは、ネットワーク経由で結合した１つまたは複数のコンピュータを含み得る。また、コンピュータシステムは、内部モジュール（例えばメモリおよびプロセッサ）が電子データに対するオペレーションを実行するために協働するような単一の物理デバイス（例えば携帯電話や携帯情報端末「ＰＤＡ」）を含み得る。
【００２３】
本明細書および添付の特許請求の範囲において、「オブジェクト」は、個別に選択され操作されることが可能な任意のアイテムとして定義される。オブジェクトは、データと、そのデータを操作するための手続きとを含む例えばメソッド等のソフトウェアオブジェクトのようなソフトウェアオブジェクトを含むように定義される。また、オブジェクトは、ソフトウェアオブジェクト間で交換される（例えば入力または出力される）ことが可能なパラメータおよび戻り値（例えばメソッドパラメータおよびメソッド戻り値）を含むようにも定義される。
【００２４】
本明細書および添付の特許請求の範囲において、「メッセージコントラクト」は、Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ（ＳＯＡＰ）フォーマットを記述する、例えば宣言的プログラミングモデルのようなコントラクトとして定義される。メッセージコントラクトは、ＳＯＡＰエンベロープのアクション部分、ヘッダ部分、およびボディ（本文、主部）部分を定義する共通言語ランタイム（ＣＬＲ）属性に基づくことができる。この属性は、ＳＯＡＰエンベロープが例えばメソッド、メソッドパラメータ、およびメソッド戻り値から構築される仕方を制御するための型（type）に対して使用可能である。メッセージコントラクトに含まれるべきフィールドおよび／またはプロパティは、例えば[MessageHeader]または[MessageBody]で注釈付けすることができる。
【００２５】
当業者には理解されるように、本発明は、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサ方式の、またはプログラム可能な消費者電子機器（家庭電化製品）、ネットワークＰＣ、ミニコンピュータ、メインフレーム（大型）コンピュータ、携帯電話、ＰＤＡ、ページャ（ポケベル）等を含む多くのタイプのコンピュータシステム構成を備えたネットワークコンピューティング環境で実施可能である。また、本発明は、ネットワークを通じてリンクされた（有線データリンク、無線データリンク、または有線および無線のデータリンクの組合せのいずれによってでもよい）ローカルおよびリモートのコンピュータシステムがいずれもタスクを実行するような分散システム環境でも実施可能である。分散システム環境では、プログラムモジュールはローカル（構内）およびリモート（遠隔）のいずれのメモリ記憶装置に配置されてもよい。
【００２６】
コンピュータアーキテクチャ１００に示されているように、コンピュータシステム１０１および１１１はネットワーク１６１に接続される。ネットワーク１６１は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）であってもよく、インターネットであっても構わない。ネットワーク１６１に接続されたコンピュータシステムは、ネットワーク１６１に接続された他のコンピュータシステムとの間でデータを送受信する。それに応じて、コンピュータシステム１０１および１１１は、他の接続されているコンピュータシステム（図示せず）とともに、メッセージ関連データを作成し、ネットワーク１６１を通じて、メッセージ関連データ（例えば、Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ（ＩＰ）データグラム、および、Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ（ＴＣＰ）、ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ）、Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＳＭＴＰ）等のようなＩＰデータグラムを利用した他の上位層プロトコル）を交換することができる。例えば、コンピュータシステム１０１および１１１は、ＳＯＡＰエンベロープを作成し、ネットワーク１６１を通じてＳＯＡＰエンベロープを交換することができる。
【００２７】
コンピュータシステム１０１は、アプリケーションコード１０２、型コンバータ（タイプコンバータとも云う）１０３、チャネル１０６、エンコーダ１０７、およびストレージ１６３を含む。アプリケーションコード１０２は、例えば、アプリケーションコード１１２に対応するクライアントプロキシのような、分散アプリケーションの一部であってもよい。アプリケーションコード１０２は、メソッドまたはオブジェクト指向プログラミングモデルに従って開発されたコードであってもよい。したがって、アプリケーションコード１０２のモジュールどうしの間、アプリケーションコード１０２のモジュールとアプリケーションコード１１２のモジュールとの間、および、アプリケーションコード１０２のモジュールと他のアプリケーションコード（例えば分散アプリケーションの異なる部分）のモジュールとの間で交換されるデータは、例えば論理型、ブール（Boolean）型、２進型、８進型、１０進型、１６進型、整数型、浮動小数点型、文字型、文字列型、ユーザ定義データ型、およびデータ構造を定義するために用いられるこれらのデータ型の組合せのような型付きデータ(typed data)であることが可能である。
【００２８】
型コンバータ１０３は、例えばメソッド呼出へのパラメータのような型付きオブジェクトに対応する型付きデータを、対応するＳＯＡＰ要素に変換（すなわちシリアライズ：直列化）し、ＳＯＡＰ要素を、型付きオブジェクトに対応する型付きデータに変換（すなわちデシリアライズ：非直列化）するように構成される。型付きオブジェクト、例えばアプリケーションコード１０２に含まれる（例えばあるクラスの）メソッドは、例えばメッセージコントラクトモデル１９１のようなメッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性（例えば共通言語ランタイム（ＣＬＲ）属性）で注釈付けすることができる。型コンバータ１０３は、メッセージコントラクト属性を処理することにより、型付きオブジェクトに対する型付きデータを、例えばｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）命令のような対応するＳＯＡＰ要素にマッピングできる。いくつかの実施形態では、型コンバータ１０３は、メッセージコントラクトモデルに従って、ＣＬＲメソッドへのパラメータを１つまたは複数のＳＯＡＰ要素に変換し、ＳＯＡＰ要素をＣＬＲメソッドへのパラメータに変換するように構成された、ランタイムコンポーネントである。それに応じて、型コンバータ１０３は、メッセージコントラクトモデル１９１を利用して、型付きＣＬＲオブジェクトをＳＯＡＰ要素のＣＬＲ表現に変換し、ＳＯＡＰ要素のＣＬＲ表現を型付きＣＬＲオブジェクトに変換することができる。
【００２９】
チャネル１０６は、ＳＯＡＰエンベロープを送受信するため入出力抽象化（I/O abstraction）を提供する。チャネル１０６は、さまざまなトランスポートプロトコル方式（ＨＴＴＰ、ＴＣＰ、およびＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ（ＵＤＰ）等）、インタフェース方式、およびアドレシング方式のいずれかを使用するための抽象化を提供することも可能である。一般的に、チャネルはコネクションと呼ばれることもある。
【００３０】
エンコーダ１０７は、ＳＯＡＰ要素を生オクテットにエンコードし、生オクテットをＳＯＡＰ要素にデコードするための１つまたは複数のエンコーダを含む。したがって、エンコーダ１０７は「エンコーダ」と称しているが、デコードを行うようにも構成される。コンピュータアーキテクチャ１００において、エンコーダ１０７は、エンコーダ１２７、１２８、および１２９を含む。エンコーダ１２７、１２８、および１２９のそれぞれが別々のエンコード／デコードを行うように構成できる。例えば、エンコーダ１２７はＳＯＡＰ  ｏｖｅｒ  ｔｅｘｔ  ＸＭＬをサポートするように構成され、エンコーダ１２８はＳＯＡＰ  ｏｖｅｒ  ｂｉｎａｒｙ  ＸＭＬをサポートするように構成され、エンコーダ１２９はＭｅｓｓａｇｅ−Ｔｒａｎｓｍｉｓｓｉｏｎ Ｏｐｔｉｍｉｚａｔｉｏｎ Ｍｅｃｈａｎｉｓｍ(メッセージ送信最適化メカニズム)（ＭＴＯＭ）をサポートするように構成されることが可能である。また、エンコーダは、圧縮方式を実施することも可能である。圧縮方式としてはＬＺ（Lempel-Ziv）やＧＺＩＰ(GNU Zip)のような汎用圧縮方式があるがこれらに限定されない。これらは、階層化エンコーダ（より基本的なエンコーダ上に構築されたエンコーダ）である。
【００３１】
テキストベースのエンコーディング（符号化）は、分散アプリケーション間の相互運用性を向上させるためのメカニズムを備える。例えば、テキストベースのエンコーディングは、ＵＴＦ８、ＵＴＦ１６ビッグエンディアン（Big-Endian）、およびＵＴＦ１６リトルエンディアン(Little-Endian)の文字セットをサポートすることができる。テキストベースのエンコーディングは、例えば「ｔｅｘｔ／ｘｍｌ」や「ａｐｐｌｉｃａｔｉｏｎ／ｓｏａｐ＋ｘｍｌ」（例えばＳＯＡＰ１．１またはＳＯＡＰ１．２のいずれかに対応する）のような種々のＣｏｎｔｅｎｔＴｙｐｅｓをサポートすることができる。
【００３２】
バイナリＸＭＬエンコーディングは、ＸＭＬをバイナリ表現でエンコードするためのメカニズムを備える。バイナリ表現は、よりコンパクトで、より効率的な解析が可能である。バイナリベースのエンコーディングは、例えば、「ａｐｐｌｉｃａｔｉｏｎ／ｓｏａｐ＋ｍｓｂｉｎ１」および「ａｐｐｌｉｃａｔｉｏｎ／ｓｏａｐ＋ｍｓｂｉｎｓｅｓｓｉｏｎ１」のようなＣｏｎｔｅｎｔＴｙｐｅｓをサポートすることができる。
【００３３】
ＭＴＯＭ（メッセージ送信最適化メカニズム）エンコーディングは、ＳＯＡＰエンベロープのコンテクスト内でバイナリＸＭＬ要素を効率的にエンコードするためのメカニズムを備える。ＭＴＯＭは、マルチパートＭＩＭＥ(多目的インターネットメール拡張仕様)コンテナの１つのパート（例えば多数のパートのうちの１つ）としてＳＯＡＰエンベロープを表現する。ＳＯＡＰエンベロープの位置を変えて、送信側または受信側のいずれかに、対応する添付ファイルがあればそれをバッファリングさせることができる。例えば、ＳＯＡＰエンベロープを最初の要素（例えば、１つ以上のパートのうちの最初のパート）として有するＭＩＭＥコンテナは、ライタ（書き出しプログラム）に、対応する添付ファイルが後にあればそれをバッファリングさせることができる。他方、ＳＯＡＰエンベロープを最後の要素（例えば、１つ以上のパートのうちの最後のパート）として有するＭＩＭＥコンテナは、リーダ（読み取りプログラム）に、対応する添付ファイルが前にあればそれをバッファリングさせることができる。
【００３４】
ＭＴＯＭは、ＳＯＡＰエンベロープ内のバイナリ添付ファイルを論理的に含む。ＭＴＯＭは、他のメッセージエンコーダと多様的（polymorphic：多相的ともいう）であり、エンドユーザプログラミングモデルへの変更は不要である。さらに、ＭＴＯＭは、ネイティブフォーマット（エンコードされていない）でのバイナリデータの添付を容易にすることで、（エンコードされたフォーマットに比べて）ＳＯＡＰメッセージのスペースを節約し、さもなければ（計算量的に高価になるおそれのある）エンコーディングアルゴリズムを実装するために使用されるリソースを解放する。
【００３５】
ストレージ１６３は、例えば磁気ハードドライブのようなリモートまたはローカルの大容量記憶装置としてよい。ストレージ１６３は辞書１６２を格納する。辞書１６２は、１つまたは複数のＳＯＡＰおよび／またはＸＭＬタームならびに対応する短縮代替言語を含むことができる。例えば、辞書１６２は、「Ｅｎｖｅｌｏｐｅ」あるいは「ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／２００３／０５／ｓｏａｐ−ｅｎｖｅｌｏｐｅ」を置換するための値「１」を格納することができる。これにより、置換を利用して、ネットワーク１６１上でのトランスポートのためのエンコーディングの前にＳＯＡＰエンベロープのサイズを縮小することができる。
【００３６】
辞書１６２は、静的辞書部分および動的辞書部分を含むことができる。辞書１６２の静的部分は、多種多様なアプリケーション間で比較的高度の共通性を有するＳＯＡＰおよび／またはＸＭＬタームを含むことができる。例えば、多くの異なるアプリケーションが（機能とは独立に）ターム「Ｅｎｖｅｌｏｐｅ」および「ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／２００３／０５／ｓｏａｐ−ｅｎｖｅｌｏｐｅ」を使用する可能性が高い。そこで、これらのタームを辞書１６２の静的部分に含めることができる。
【００３７】
辞書１６２の動的部分は、少数のアプリケーションの間で共通ではあるがすべてのアプリケーションあるいは多数のアプリケーションの間では必ずしも共通でないＳＯＡＰおよび／またはＸＭＬタームを含むことができる。例えば、バンキング（銀行）アプリケーションに共通のタームを、バンキングアプリケーションを利用するコンピュータシステムの辞書の動的部分に含めることができる。しかし、バンキングタームは、バンキングアプリケーションを使用しないコンピュータシステムの辞書の動的部分には含めなくてもよい。タームは、アプリケーション間で共通であると識別される場合に辞書の動的部分に含めることができる。時には（例えば、ある不使用期間経過時に）、タームを辞書の動的部分から削除してもよい。動的辞書タームは、コネクション上で送信される、そのタームを参照する最初のメッセージとともにそのコネクション上で増分的に送信されることが可能であるという点で、静的辞書タームとは異なる。このトークン化は、特定の型付きデータ構造あるいはメソッド、パラメータ、または戻り値に関連するＸＭＬ名および名前空間（ネームスペース）のような、繰り返されやすいメッセージの部分に範囲を限定することができる。
【００３８】
コンピュータシステム１１１は、アプリケーションコード１１２、型コンバータ１１３、チャネル１１６、エンコーダ１１７、およびストレージ１４３を含む。アプリケーションコード１１２は、例えば、アプリケーションコード１０２に対応するサービスのような、分散アプリケーションの一部であってもよい。アプリケーションコード１１２は、メソッドまたはオブジェクト指向プログラミングモデルに従って開発されたコードであってもよい。したがって、アプリケーションコード１１２のモジュールどうしの間、アプリケーションコード１１２のモジュールとアプリケーションコード１０２のモジュールとの間、および、アプリケーションコード１１２のモジュールと他のアプリケーションコード（例えば分散アプリケーションの異なる部分）のモジュールとの間で交換されるデータは、例えば論理型、２進型、８進型、１０進型、１６進型、整数型、浮動小数点型、文字型、文字列型、ユーザ定義データ型、およびデータ構造を定義するために用いられるこれらのデータ型の組合せのような型付きデータであることが可能である。
【００３９】
型コンバータ１１３は、例えばメソッド呼出へのパラメータのような型付きオブジェクトに対応する型付きデータを、対応するＳＯＡＰ要素に変換（すなわちシリアライズ）し、ＳＯＡＰ要素を、型付きオブジェクトに対応する型付きデータに変換（すなわちデシリアライズ）するように構成される。型付きオブジェクト、例えばアプリケーションコード１１２に含まれる（例えばあるパブリック・シールド・クラスの）メソッドは、例えばメッセージコントラクトモデル１９１のようなメッセージコントラクトモデルの１つまたは複数のメッセージコントラクト属性（例えば共通言語ランタイム（ＣＬＲ）属性）で注釈付けすることができる。型コンバータ１１３は、メッセージコントラクト属性を処理することにより、型付きオブジェクトに対する型付きデータを、例えばＸＭＬ要素のような対応するＳＯＡＰ要素にマッピングできる。いくつかの実施形態では、型コンバータ１１３は、メッセージコントラクトモデルに従って、ＣＬＲメソッドへのパラメータをＳＯＡＰ要素に変換し、ＳＯＡＰ要素をＣＬＲメソッドへのパラメータに変換するように構成された、ランタイムコンポーネントである。それに応じて、型コンバータ１１３は、メッセージコントラクトモデル１９１を利用して、型付きＣＬＲオブジェクトをＳＯＡＰ要素のＣＬＲ表現に変換し、ＳＯＡＰ要素のＣＬＲ表現を型付きＣＬＲオブジェクトに変換することができる。
【００４０】
ディスパッチャ１１４は、（例えば適合したチャネルから）ＳＯＡＰ要素を受け取り、適合した型付きオブジェクト（例えばメソッド）にＳＯＡＰ要素をディスパッチ（タスク指名）する。ディスパッチャ１１４は、ＳＯＡＰ要素を受け取ると、そのＳＯＡＰ要素を適合した型付きオブジェクトとマッチングしようと試みる。いくつかの実施形態では、ディスパッチャ１１４は、（ＳＯＡＰ要素内の）ＸＭＬ要素の各部分を適合した型付きオブジェクトとマッチングしようと試みる。ディスパッチャ１１４は、ＸＭＬ要素の各部分を、オブジェクト１４１内でオブジェクトに注釈付けしているメッセージコントラクト属性と比較することができる。マッチが識別された場合、ディスパッチャ１１４はそのＳＯＡＰ要素を、マッチしたオブジェクトにディスパッチする。メッセージは、マッチしたオブジェクトに注釈付けしているメッセージコントラクト属性のアクション（Ａｃｔｉｏｎ）プロパティの値でディスパッチできる。マッチが識別されない場合、ディスパッチャ１１４はＳＯＡＰ要素をデフォルトオブジェクトにディスパッチすることができる。
【００４１】
チャネル１１６は、ＳＯＡＰエンベロープを送受信するためのＩ／Ｏ抽象化を提供する。チャネル１１６は、さまざまなトランスポートプロトコル方式（ＨＴＴＰ、ＴＣＰ、およびＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ（ＵＤＰ）等）、インタフェース方式、およびアドレシング方式のいずれを使用するための抽象化を提供することも可能である。チャネル１１６は、チャネル１０６でも提供されているトランスポートプロトコル方式、インタフェース方式、およびアドレシング方式に対する抽象化を提供することができる。
【００４２】
エンコーダ１１７は、ＳＯＡＰ要素を生オクテットにエンコードし、生オクテットをＳＯＡＰ要素にデコードするための１つまたは複数のエンコーダを含む。したがって、エンコーダ１１７は「エンコーダ」と称しているが、デコードを行うようにも構成される。コンピュータアーキテクチャ１００において、エンコーダ１１７は、エンコーダ１３７、１３８、および１３９を含む。エンコーダ１３７、１３８、および１３９のそれぞれが別々のエンコード／デコードを行うように構成できる。例えば、エンコーダ１３７はＳＯＡＰ  ｏｖｅｒ  ｔｅｘｔ  ＸＭＬをサポートするように構成され、エンコーダ１３８はＳＯＡＰ  ｏｖｅｒ  ｂｉｎａｒｙ  ＸＭＬをサポートするように構成され、エンコーダ１３９はＭｅｓｓａｇｅ−Ｔｒａｎｓｍｉｓｓｉｏｎ Ｏｐｔｉｍｉｚａｔｉｏｎ Ｍｅｃｈａｎｉｓｍ(メッセージ送信最適化メカニズム)（ＭＴＯＭ）をサポートするように構成されることが可能である。
【００４３】
ストレージ１４３は、例えば磁気ハードドライブのようなリモートまたはローカルの大容量記憶装置としてよい。ストレージ１４３は辞書１４２およびオブジェクト１４１を格納する。辞書１４２は、１つまたは複数のＳＯＡＰおよび／またはＸＭＬタームならびに長さを短縮した対応する置換を含むことができる。例えば、辞書１４２は、「ｗｓａ」を置換するための値「２」を格納することができる。これにより、置換を利用して、ネットワーク１６１上でのトランスポートのためのエンコーディングの前にＳＯＡＰエンベロープのサイズを縮小することができる。
【００４４】
辞書１４２は、静的辞書部分および動的辞書部分を含むことができる。静的部分は、多種多様なアプリケーション間で比較的高度の共通性を有するＳＯＡＰおよび／またはＸＭＬタームを含むことができる。辞書１４２の動的部分は、少数のアプリケーションの間で共通ではあるがすべてのアプリケーションあるいは多数のアプリケーションの間では必ずしも共通でないＳＯＡＰおよび／またはＸＭＬタームを含むことができる。
【００４５】
図２は、型付きアプリケーションデータをフレキシブルに送信するメソッド２００の例示的フローチャートを示している。メソッド２００は、コンピュータアーキテクチャ１００内のモジュールおよびデータに関して説明される。
【００４６】
アプリケーションコード１０２は、例えば型付きメッセージに含まれる型付きデータ１３１を生成することができる。型付きメッセージは、型付き（ＣＬＲ）オブジェクトとしてＳＯＡＰエンベロープを表現するために、メッセージコントラクトモデル１９１に従って構成されることが可能である。型付きデータ１３１は、メソッドに対するパラメータおよび／または戻り値を含み得る。例えば、アプリケーションコード１０２は、メソッドの呼出を引き起こすパラメータとともにメソッドを呼び出すことができる。
【００４７】
メソッド２００は、型付きオブジェクトに対応する型付きオブジェクトパラメータにアクセスする行為（act:アクト）（行為２０１）を含む。例えば、型コンバータ１０３が型付きデータ１３１にアクセスすることができる。型付きデータ１３１は、型付きオブジェクト（例えばメソッドを呼び出すためのパラメータ）に対応するパラメータを含み得る。型付きオブジェクトは、例えば属性１７１のような、メッセージコントラクトモデル１９１の１つまたは複数のメッセージコントラクト属性で注釈付けされることが可能である。それに応じて、属性１７１は、型付きデータ１３１と、対応するＳＯＡＰ要素（例えばＳＯＡＰ要素１７２）との間のマッピングを定義する。
【００４８】
メソッド２００は、上記１つまたは複数のメッセージコントラクト属性に従って、アクセスした型付きオブジェクトパラメータをＳＯＡＰ要素にマッピングする行為（行為２０２）を含む。例えば、型コンバータ１０３は、属性１７１に従って、型付きデータ１３１（例えばメソッドを呼び出すためのパラメータ）をＳＯＡＰ要素１７２（例えばＸＭＬ要素）にマッピングすることができる。
【００４９】
メソッド２００は、上記１つまたは複数のメッセージコントラクト属性を参照することにより、ＳＯＡＰエンベロープ内の位置を識別する行為（行為２０３）を含む。例えば、型コンバータ１０３は、属性１７１を参照することにより、（コンピュータシステム１０１で作成された）エンベロープ１３２Ａ内の位置を識別することができる。属性１７１は、例えば、エンベロープ１３２Ａ内のメッセージヘッダあるいはメッセージボディを識別できる。また、属性１７１は、メッセージヘッダまたはメッセージボディ内の指定された位置を識別できる。したがって、対応するＳＯＡＰ要素を、メッセージヘッダ内またはメッセージボディ内で順序付けることができる。
【００５０】
メソッド２００は、ＳＯＡＰエンベロープ内の識別した位置にＳＯＡＰ要素を挿入する行為（行為２０４）を含む。例えば、型コンバータ１０３は、エンベロープ１３２Ａのヘッダ部分またはボディ部分（例えばその指定された位置）にＳＯＡＰ要素１７２を挿入できる。エンベロープ１３２Ａは、例えば、選択されたトランスポート、インタフェース、およびアドレシング方式に従って、チャネル１０６のうちのあるチャネルを通じて転送できる。例えば、エンベロープ１３２Ａはトランスポート１３３にカプセル化することができる。
【００５１】
例えばエンコーダ１２８のような、エンコーダ１０７のうちのあるエンコーダが、カプセル化されたエンベロープ１３２Ａを生オクテット１３４にエンコードすることができる。適宜、エンコーダ１２８は辞書１６２を参照して、共通に使用されているタームで置換を行う。コンピュータシステム１０１は、ネットワーク１６１経由でコンピュータシステム１１１へ生オクテット１３４を送信する。コンピュータシステム１１１は、ネットワーク１６１経由でコンピュータシステム１０１から生オクテット１３４を受信する。
【００５２】
図３は、型付きアプリケーションデータをフレキシブルに受信するメソッド３００の例示的フローチャートを示している。メソッド３００は、コンピュータアーキテクチャ１００内のモジュールおよびデータに関して説明される。
【００５３】
例えばエンコーダ１３８のような、エンコーダ１１７のうちのあるエンコーダが、生オクテット１３４を受信することができる。エンコーダ１３８は、生オクテット１３４をデコードしてエンベロープ１３２Ｂを取り出すことができる。適宜、エンコーダ１３８は辞書１４２を参照して、エンコーディング前に置換されたタームを置換する。生オクテット１３４のデコーディングは、エンベロープ１３２Ｂが、例えば、選択されたトランスポート、インタフェース、およびアドレシング方式に従って転送されたことを明らかにすることができる。例えば、生オクテット１３４のデコーディングは、エンベロープ１３２Ｂがトランスポート１３３にカプセル化されていることを明らかにすることができる。
【００５４】
トランスポート、インタフェース、および／またはアドレシング方式に基づき、適切なチャネルを通じて、カプセル化されたエンベロープ１３２Ｂを転送できる。ネットワーク１６１の介在により、転送中にエンベロープ１３２Ａ内のデータの各部分（例えばルーティングヘッダ）が変化する可能性があるので、エンベロープ１３２Ａおよびエンベロープ１３２Ｂは異なるデータを含み得る。ディスパッチャ１１４は、ＳＯＡＰ要素１７２を含むエンベロープ１３２Ｂを受け取る。
【００５５】
メソッド３００は、ＳＯＡＰエンベロープに含まれるＳＯＡＰ要素にアクセスする行為（行為３０１）を含む。例えば、ディスパッチャ１１４がＳＯＡＰ要素１７２にアクセスすることができる。
【００５６】
メソッド３００は、ＳＯＡＰ要素に対応する型付きオブジェクトを識別する行為（行為３０２）を含む。例えば、ディスパッチャ１１４が、オブジェクト１４１（例えば、コンピュータシステム１１１における種々の分散アプリケーションコンポーネントに含まれるオブジェクトのコレクション）からオブジェクト１５１を識別することができる。オブジェクト１５１は、メッセージコントラクトモデル１９１の属性１８１で注釈付けされた型付きオブジェクト（例えばアプリケーションコード１１２のメソッド）であってもよい。属性１８１は、ＳＯＡＰ要素１７２と、対応する型付きオブジェクトパラメータ（例えばメソッドを呼び出すためのパラメータ）との間のマッピングを定義できる。ディスパッチャ１１４は、ＳＯＡＰ要素１７２の各部分（例えばＸＭＬ要素の各部分）を属性１８１とマッチングすることにより、ＳＯＡＰ要素１７２がオブジェクト１５１に対応することを識別できる。いくつかの実施形態では、これは、ＵＲＩ（Uniform Resource Identifiers）（例えばＷＳ−ＡｄｄｒｅｓｓｉｎｇアクションＵＲＩ）を利用して、ＳＯＡＰ要素１７２をオブジェクト１５１にマッピングすることを含む。
【００５７】
メソッド３００は、１つまたは複数のメッセージコントラクト属性に従って、アクセスしたＳＯＡＰ要素を型付きオブジェクトパラメータにマッピングする行為（行為３０３）を含む。例えば、型コンバータ１１３が、（属性１８１に従って）ＳＯＡＰ要素１７２を、型付きデータ１３１を含む型付きメッセージにマッピングできる。型付きメッセージは、型付き（ＣＬＲ）オブジェクトとしてＳＯＡＰエンベロープを表現するために、メッセージコントラクトモデル１９１に従って構成されることが可能である。型付きデータ１３１は、メソッドに対するパラメータおよび／または戻り値を含み得る。例えば、アプリケーションコード１１２は、メソッドの呼出を引き起こすパラメータとともに（アプリケーション１０２で発生した）メソッドコールを受け取ることができる。
【００５８】
このように、本発明の実施形態によれば、（ソフトウエアの）開発者は、メソッドパラメータおよび戻り値がメッセージヘッダおよびメッセージボディにシリアライズされる仕方を制御できる。また、開発者は、メソッドパラメータおよび戻り値がメッセージヘッダおよびメッセージボディからデシリアライズされる仕方を制御できる。それに応じて、開発されたアプリケーションは、型付きデータ（例えばＣＬＲ型付きオブジェクト）の利点とＳＯＡＰメッセージングのフレキシビリティの両方を保持することができる。
【００５９】
以下の例示的なコード命令は、ある注釈付きクラスを示している。この注釈付きクラスのプロパティおよびフィールドは、メッセージコントラクト属性で注釈付けされている。
【００６０】
ライン１：  [MessageContract(Action="http://createpersonrequest", 
Name="CreatePersonRequest")]
ライン２：  public class CreatePersonRequest {
ライン３：  [MessageBody(Namespace="http://namespace", Name="MyData", Position
=2)]
ライン４：  public string OptionalData;
ライン５：  [MessageBody(Namespaceuri="http://namespace", Name="TheList")]
ライン６：  Public Ilist<int> Ids;
ライン７：  [MessageHeader(Namespaceuri="http://namespace", Name="Request")]
ライン８：  internal Guid RequestId;
ライン９：  [MessageHeader(Namespaceuri="http://namespace", Name="Session",
MustUnderstand=true, Relay=false, Actor=http://actor)]
ライン１０：  internal Guid SessionId;
【００６１】
ライン１の[MessageContract]属性は、ＳＯＡＰエンベロープの行為および作成を制御するために、ライン２のパブリッククラスCreatePersonRequestに注釈付けし、メッセージコントラクト「CreatePersonRequest」（例えばメッセージコントラクトモデル１９１）を定義している。ライン３および５はそれぞれライン４および６に対して、ＳＯＡＰエンベロープのボディに含まれることを示す[MessageBody]で注釈付けしている。ライン７および８はそれぞれライン９および１０に対して、ＳＯＡＰエンベロープのヘッダに含まれることを示す[MessageHeader]で注釈付けしている。ライン３の「Position=2」属性は、注釈付けされた型付きデータがメッセージボディ内の第２の要素として含められるべきことを示す。
【００６２】
例えば型コンバータ１０３あるいは型コンバータ１１３のような型コンバータが、例えばメッセージコントラクトモデル１９１のようなメッセージコントラクトモデルを利用することにより、上記の例示的なコード命令を以下の例示的なＳＯＡＰエンベロープに変換することができる。
【００６３】
<soap:Envelope>
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"
<soap:Header xmlns:x="http://namespace">
<x:Request>xc6gf83</Request>
<x:Session MustUnderstand="true", Relay="false", Actor="http://actor">
gg57hjfg
</x:Session>
<wsa:Action>http://createpersonrequest</wsa:Action>
</soap:Header>
<soap:Body xmlns:x='http://namespace'>
<x:TheList>
<x:Item>5</x:Item>
<x:Item>10</x:Item>
</x:TheList>
<x:MyData>some data here</x:MyData>
</soap:Body>
</soap:Envelope>
【００６４】
また、例えば型コンバータ１０３あるいは型コンバータ１１３のような型コンバータが、例えばメッセージコントラクトモデル１９１のようなメッセージコントラクトモデルを利用することにより、例示的ＳＯＡＰエンベロープを上記の例示的なコード命令に変換することもできる。上記の例示的なＳＯＡＰエンベロープにおいて、「MyData」要素は、ＳＯＡＰエンベロープボディ内の第２位置にある。
【００６５】
本発明のいくつかの実施形態では、トランスポートストリーミングを利用することにより、メモリ内で一時に表現しきれない、比較的大きいメッセージに対する補償を行う。すなわち、トランスポートストリーミングは、メッセージを処理するサービスに利用可能なメモリよりも（例えば物理メモリや割当てメモリの制限のために）大きいメッセージに対して有益である。トランスポートストリーミングは、メッセージをストリーミングするための専用トランスポートコネクション（ＴＣＰソケット、名前付きパイプ、ＨＴＴＰコネクション等）を含み得る。トランスポートストリーミングを使用することになるコンピュータシステムは、適合したトランスポートファクトリ（例えば、TcpChannelFactory/TcpListenerFactory、NamedPipeChannelFactory/NamedPipeListenerFactory、およびHttpChannelFactory/HttpListenerFactory）のＴｒａｎｓｆｅｒ  Ｍｏｄｅプロパティに従って構成されることが可能である。
【００６６】
トランスポートストリーミングは、型付きオブジェクトに注釈付けするために用いられる対応するトランスポートバインディング要素（例えば、TransportBindingElement、NamedPipeTransportBindingElementおよびHttpTransportBindingElement）を通じて有効にすることができる。トランスポートプロパティは、チャネル型によって異なり得る。例えば、ＴＣＰまたは名前付きパイプの場合、IOutputChannel/IInputChannelまたはIDuplexSessionChannel（これは１対のIOutputChannel/InputChannelを使用する)を使用することができる。ＨＴＴＰの場合、IRequestChannel/IReplyChannel、IRequestSessionChannel/IReplySessionChannel、IOutputChannel/IInputChannelまたはIFullDuplexChannelを使用することができる。所与のデータコントラクトに対してストリーミングを構成する場合、（例えばチャネル１０６および／または１１６における）適合したチャネルにより、適正なチャネル型を要求し作成することが容易になる。
【００６７】
トランスポートストリーミングは、メッセージのリーダにとって透過的である。すなわち、アプリケーションは、メッセージを扱うために別様に書かれる必要はない。アプリケーションは単に、共通のＸＭＬ要素ＡＰＩ（例えばＸｍｌＲｅａｄｅｒ）を用いてシーケンシャルに値を読むことができる。トランスポートバインディング要素は、トランスポートバインディング要素をインスタンス化しその要素のプロパティに値を代入することによって構成できる。また、トランスポートバインディング要素は、ＣＬＲコンフィグレーション（例えばｍｙａｐｐ．ｃｏｎｆｉｇファイル）を通じて構成することも可能である。
【００６８】
図４は、本発明の原理のために好適なオペレーティング環境を示している。図４および以下の説明は、本発明が実施され得る好適なコンピューティング環境の簡単な概説を行うことを意図している。必須ではないが、本発明は、コンピュータシステムによって実行されるプログラムモジュールのようなコンピュータ実行可能命令との一般的関連で説明される。一般的に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。コンピュータ実行可能命令、それに関連するデータ構造、およびプログラムモジュールは、本明細書に開示された方法の行為を実行するためのプログラムコード手段の例を表す。
【００６９】
図４を参照すると、本発明を実施する例示的システムは、コンピュータシステム４２０の形態の汎用コンピューティングデバイスを含む。コンピュータシステム４２０は、処理ユニット４２１、システムメモリ４２２、および、システムメモリ４２２を含む種々のシステムコンポーネントを処理ユニット４２１に結合するシステムバス４２３を含む。処理ユニット４２１は、本発明の特徴を含めて、コンピュータシステム４２０の特徴を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス４２３は、メモリバスまたはメモリコントローラ、ペリフェラルバス（周辺機器用バス）、またはさまざまなバスアーキテクチャのいずれかを用いたローカルバスを含む数種のバス構成のいずれでもよい。システムメモリは、読み出し専用メモリ（ＲＯＭ）４２４およびランダムアクセスメモリ（ＲＡＭ）４２５を含む。起動中等にコンピュータシステム４２０内の要素間で情報を転送するために役立つ基本ルーチンを含む基本入出力システム（ＢＩＯＳ）４２６がＲＯＭ４２４に格納され得る。
【００７０】
また、コンピュータシステム４２０は、磁気ハードディスク４３９を読み書きするための磁気ハードディスクドライブ４２７、リムーバブル（取り外し可能）磁気ディスク４２９を読み書きするための磁気ディスクドライブ４２８、および例えばＣＤ−ＲＯＭ等の光媒体のようなリムーバブル光ディスク４３１を読み書きするための光ディスクドライブ４３０も含み得る。磁気ハードディスクドライブ４２７、磁気ディスクドライブ４２８、および光ディスクドライブ４３０はそれぞれハードディスクドライブインタフェース４３２、磁気ディスクドライブインタフェース４３３、および光ドライブインタフェース４３４によってシステムバス４２３に接続される。ドライブ（駆動装置）およびそれらに関連するコンピュータ可読媒体は、コンピュータシステム４２０のためのコンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性ストレージを備える。本明細書に記載される例示的環境は磁気ハードディスク４３９、リムーバブル磁気ディスク４２９およびリムーバブル光ディスク４３１を使用しているが、データを格納するための他のタイプのコンピュータ可読媒体もまた使用可能であり、これには磁気カセット、フラッシュメモリカード、ディジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭ等が含まれる。
【００７１】
オペレーティングシステム４３５、１つまたは複数のアプリケーションプログラム４３６、他のプログラムモジュール４３７、およびプログラムデータ４３８を含めて、１つまたは複数のプログラムモジュールを含むプログラムコード手段が、ハードディスク４３９、磁気ディスク４２９、光ディスク４３１、ＲＯＭ４２４またはＲＡＭ４２５に格納され得る。ユーザは、キーボード４４０、ポインティングデバイス４４２、または、例えばマイクロフォン、ジョイスティック、ゲームパッド、スキャナ等のような他の入力装置（図示せず）を通じてコンピュータシステム４２０にコマンドおよび情報を入力することができる。これらおよびその他の入力装置は、システムバス４２３に結合した入出力インタフェース４４６を通じて処理ユニット４２１に接続され得る。入出力インタフェース４４６は、例えばシリアルポートインタフェース、ＰＳ／２インタフェース、パラレルポートインタフェース、ユニバーサルシリアルバス（ＵＳＢ）インタフェース、またはＩｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ（ＩＥＥＥ）１３９４インタフェース（すなわちＦｉｒｅＷｉｒｅインタフェース）のような多種多様なインタフェースの任意のものを論理的に表し、また、相異なるインタフェースの組合せを論理的に表してもよい。
【００７２】
モニタ４４７または他のディスプレイ装置もまた、ビデオインタフェース４４８経由でシステムバス４２３に接続される。例えばスピーカやプリンタのような他の周辺出力装置（図示せず）もコンピュータシステム４２０に接続され得る。
【００７３】
コンピュータシステム４２０は、例えばオフィス規模または企業規模のコンピュータネットワーク、ホームネットワーク、イントラネット、および／またはインターネットのようなネットワークに接続可能である。コンピュータシステム４２０は、このようなネットワークを通じて、例えばリモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースのような外部ソースとデータを交換することができる。
【００７４】
コンピュータシステム４２０はネットワークインタフェース４５３を含み、これを通じて外部ソースからデータを受信し、および／または外部ソースへデータを送信する。図４に示されているように、ネットワークインタフェース４５３は、リンク４５１経由でリモートコンピュータシステム４８３とデータを交換することを容易にする。ネットワークインタフェース４５３は、例えばネットワークインタフェースカードおよび対応するＮｅｔｗｏｒｋ  Ｄｒｉｖｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＮＤＩＳ）スタックのような１つまたは複数のソフトウェアおよび／またはハードウェアモジュールを論理的に表し得る。リンク４５１はネットワークの一部（例えばイーサーネットセグメント）を表し、リモートコンピュータシステム４８３はネットワークのノードを表す。
【００７５】
また、コンピュータシステム４２０は入出力インタフェース４４６を含み、これを通じて外部ソースからデータを受信し、および／または外部ソースへデータを送信する。入出力インタフェース４４６は、リンク４５９経由でモデム４５４（例えば標準モデム、ケーブルモデム、またはディジタル加入者線（ＤＳＬ）モデム）に結合する。リンク４５９を通じてコンピュータシステム４２０は外部ソースとの間でデータの送受信を行う。図４に示されているように、入出力インタフェース４４６およびモデム４５４は、リンク４５２経由でリモートコンピュータシステム４９３とデータを交換することを容易にする。リンク４５２はネットワークの一部を表し、リモートコンピュータシステム４９３はネットワークのノードを表す。
【００７６】
図４は本発明のための好適なオペレーティング環境を表しているが、本発明の原理は、必要であれば適合した変更を加えて、本発明の原理を実施することが可能な任意のシステムにおいて使用可能である。図４に示した環境は単なる例示であり、本発明の原理が実施され得る多様な環境の小部分すらも代表するものではない。
【００７７】
本発明によれば、アプリケーションコード、クライアントプロキシ、サービス、型コンバータ、チャネル、メッセージエンコーダ／デコーダ、およびディスパッチャ等のモジュールと、それらに関連する型データ、ＳＯＡＰエンベロープ、トランスポート、生オクテット、辞書、およびオブジェクト等のデータは、コンピュータシステム４２０に関連するコンピュータ可読媒体のいずれに格納されてもよく、いずれでアクセスされてもよい。例えば、このようなモジュールの各部分および関連するプログラムデータの各部分は、オペレーティングシステム４３５、アプリケーションプログラム４３６、プログラムモジュール４３７および／またはプログラムデータ４３８に含まれて、システムメモリ４２２に格納されてもよい。
【００７８】
例えば磁気ハードディスク４３９のような大容量記憶装置がコンピュータシステム４２０に結合している場合、このようなモジュールおよび関連するプログラムデータもまたその大容量記憶装置に格納されてもよい。ネットワーク環境では、コンピュータシステム４２０またはその各部分に関連して図示したプログラムモジュールは、リモートコンピュータシステム４８３および／またはリモートコンピュータシステム４９３に関連するシステムメモリおよび／または大容量記憶装置のようなリモートメモリ記憶装置に格納されてもよい。このようなモジュールの実行は、前述のような分散環境で実行されてもよい。
【００７９】
本発明は、その精神および本質的特性から逸脱することなく他の具体的形態で実施されてもよい。記載した実施形態は、すべての点で、単なる例示とみなすべきであり、限定的とみなすべきではない。したがって、本発明の範囲は、上記の説明によってではなく添付の特許請求の範囲によって示される。特許請求の範囲の趣意および均等の範囲内に入るすべての変更は本発明の範囲内に包含されるものとする。
【図面の簡単な説明】
【００８０】
【図１】Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌを用いて型付きオブジェクトを交換することを容易にするコンピュータアーキテクチャの一例を示す図である。
【図２】型付きアプリケーションデータをフレキシブルに送信する方法を示す例示的フローチャートである。
【図３】型付きアプリケーションデータをフレキシブルに受信する方法を示す例示的フローチャートである。
【図４】本発明の原理のために好適なオペレーティング環境を示す図である。
【符号の説明】
【００８１】
１００  コンピュータアーキテクチャ
１０１  コンピュータシステム
１０２  アプリケーションコード
１０３  型コンバータ
１０６  チャネル
１０７  エンコーダ
１１１  コンピュータシステム
１１２  アプリケーションコード
１１３  型コンバータ
１１４  ディスパッチャ
１１６  チャネル
１１７  エンコーダ
１２７，１２８，１２９  エンコーダ
１３１  型付きデータ
１３２Ａ，１３２Ｂ  エンベロープ
１３３  トランスポート
１３４  生オクテット
１３７，１３８，１３９  エンコーダ
１４１  オブジェクト
１４２  辞書
１４３  ストレージ
１５１  オブジェクト
１６１  ネットワーク
１６２  辞書
１６３  ストレージ
１７１  属性
１７２  ＳＯＡＰ要素
１８１  属性
１９１  メッセージコントラクトモデル
４２０  コンピュータシステム
４２１  処理ユニット
４２２  システムメモリ
４２３  システムバス
４２４  読み出し専用メモリ（ＲＯＭ）
４２５  ランダムアクセスメモリ（ＲＡＭ）
４２６  基本入出力システム（ＢＩＯＳ）
４２７  磁気ハードディスクドライブ
４２８  磁気ディスクドライブ
４２９  リムーバブル磁気ディスク
４３０  光ディスクドライブ
４３１  リムーバブル光ディスク
４３２  ハードディスクドライブインタフェース
４３３  磁気ディスクドライブインタフェース
４３４  光ドライブインタフェース
４３５  オペレーティングシステム
４３６  アプリケーションプログラム
４３７  他のプログラムモジュール
４３８  プログラムデータ
４３９  磁気ハードディスク
４４０  キーボード
４４２  ポインティングデバイス
４４６  入出力インタフェース
４４７  モニタ
４４８  ビデオインタフェース
４５１，４５２  リンク
４５３  ネットワークインタフェース
４５４  モデム
４５９  リンク
４８３，４９３  リモートコンピュータシステム
【図１】
2006164264.tif 000003
【図２】
2006164264.tif 000004
【図３】
2006164264.tif 000005
【図４】
2006164264.tif 000006