JP2006195979A - ウェブアプリケーションアーキテクチャ - Google Patents

ウェブアプリケーションアーキテクチャ Download PDF

Info

Publication number
JP2006195979A
JP2006195979A JP2005379005A JP2005379005A JP2006195979A JP 2006195979 A JP2006195979 A JP 2006195979A JP 2005379005 A JP2005379005 A JP 2005379005A JP 2005379005 A JP2005379005 A JP 2005379005A JP 2006195979 A JP2006195979 A JP 2006195979A
Authority
JP
Japan
Prior art keywords
server
client
function
request
script
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2005379005A
Other languages
English (en)
Inventor
Aditya Bansod
バンソッド アディトヤ
Chun Yu Wong
ユー ウォン クーン
Walter C Hsueh
シー.スー ウォルター
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/028,915 external-priority patent/US20060167981A1/en
Priority claimed from US11/028,890 external-priority patent/US20060149746A1/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006195979A publication Critical patent/JP2006195979A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/329Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Computer And Data Communications (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】第1のコンピュータと第2のコンピュータとの間の通信方法および通信プロトコルを提供する。
【解決手段】プロトコルは、第1のコンピュータから第2のコンピュータへのリクエストを含み、リクエストは、第2のコンピュータ上にある関数用の関数識別子と、関数用の引数とを含む。引数は、関数識別子により呼び出される関数用の型によって定義される。プロトコルはまた、第2のコンピュータから第1のコンピュータへのレスポンスを含み、レスポンスは、関数の結果を含むものであって、第1のコンピュータのためのスクリプト入力として定義される。
【選択図】図4

Description

本発明は、ネットワークベースアプリケーションを提供することに関し、特にインターネットおよびウェブベースアプリケーションを提供することに適用できる。
インターネットベースアプリケーションがより強力になりつつあり、シームレスで反応の早いユーザ経験を維持することが開発者にとって重要な特徴となってきている。ウェブベースアプリケーションは一般に、クライアントコンピュータ上で実行されているウェブブラウザを使用してアクセスされ、サーバ上で提供される1つまたは複数の関数を含む。クライアント(ウェブブラウザ)およびサーバが高速で通信するために、これらの間で効率的な通信プロトコル(一般には、HTTP)を使用することが必要とされる。
通常、ウェブブラウザは、サーバからページおよび関数(通常はHTMLなどのマークアップ言語という形で)を受け取ることにより、アプリケーション、または、そのアプリケーションの機能的要素にインターフェースを提供する。場合によっては、ブラウザは、サーバに配置されたページに対するリクエストに各々応答して、受信したデータの新しいページを表示しなければならない。そのような情報を提供するための1つの一般的なフォーマットは、HTTP(Hyper Text Transfer Protocol)である。通常、ウェブブラウザは、HTTPにおいて「GET」または「POST」コマンドを使用してウェブページをリクエストし、ページを表示するために必要とされる情報のすべてがウェブブラウザに返される。ユーザがページの一部分を更新しているだけであっても、ページを表示するために必要とされる情報などの一部のデータは何回も繰り返し受信される。ウェブブラウザからの単純なデータリクエストを更新することにより、ページの一部分のみのデータを更新する技術が開発されてきてはいるが、このようなプロトコルは、ウェブアプリケーション内で利用可能な内在的メソッドに対して開発者がフルアクセスできるようにする上で、完全に柔軟性があるとはいえない。
ブラウザが、リモートサーバ上のクラスおよびオブジェクトのメソッドをリモートで呼び出すことを可能にする現行のクライアント−サーバプロトコルの例には、SOAP(Simple Object Access Protocol)およびXML−RPCが含まれる。SOAPおよびXML−RPCの双方が、クライアントが伝送データ型(transport data type)を理解するよう要求する。双方とも、XML形式でパラメータを符号化し、XML形式で値を返す標準方式を規定しており、共通ネットワークプロトコルを介してそれらの値を渡す。SOAPおよびXML−RPCは、サーバからサーバへの通信およびシッククライアントからサーバへの通信のために主に使用される。これらは、いずれも冗長なプロトコルであり、必ずしも効率的であるとはいえない。特に、SOAPは、サーバから受信したデータを理解してクライアントで利用できるようにするため、クライアント上に比較的複雑なメカニズムを要求する。これは、Java(登録商標)Scriptなどの単純なスクリプト言語で実現するのは難しい場合がある。ウェブブラウザにおいてJava(登録商標)Scriptを使用する利点の1つは、ほとんどすべてのウェブブラウザアプリケーションが、スクリプトを実行することができるスクリプトエンジンを含んでいることである。ウェブブラウザのスクリプトエンジンを使用することにより、アーキテクチャのクライアント側でのカスタマイズをそれほど必要としない。
したがって、ウェブベースアプリケーションを起動するためのウェブブラウザとクライアントと間の通信を改善する方法があれば効果的である。
第1のコンピュータと第2のコンピュータとの間の通信方法および通信プロトコルが、クライアント−サーバ環境においてネットワークアプリケーションを提供するシステムとともに、開示されている。
一側面においては、概説すると、本発明はクライアント−サーバ環境においてネットワークアプリケーションを提供するためのシステムを含む。一実施形態において、そのシステムは、サーバ上に一連のアプリケーション関数と、スクリプティング環境内に定義された一連のクライアント関数とを含み、そのアプリケーション関数はデータ型定義を含む。独自の特徴として、クライアント関数は、その一連のアプリケーション関数の中の各々のアプリケーション関数に合致する型を含むように定義される。
別の実施形態においては、本発明は、インターネット上でウェブアプリケーションを提供するための方法である。この方法は、定義型(defined type)を有する関数およびオブジェクトをサーバ上に含むサーバ環境を提供するステップ、サーバ環境内の対応する関数およびオブジェクトにマッピングする型を有する関数およびオブジェクトをスクリプティング環境内に含むクライアント環境を生成するステップ、および、そのサーバにそのクライアント環境を提供するステップを含むことができる。
さらに別の実施形態においては、本発明は、サーバおよびクライアントコンポーネントを初期化およびインストールして、ウェブベースアプリケーションを提供するためのシステムである。このシステムは、属性を有するオブジェクトおよびメソッドを含む一連のサーバアプリケーションを含む。コード生成器(code generator)は、前記オブジェクトおよびメソッドの各々のために、Java(登録商標)Scriptクライアントサイドライブラリおよびサーバサイドライブラリを提供する。サーバサイドサービスは、クライアントからのデータをサーバ上の対応するオブジェクトおよび関数に送信する、ディスパッチャ(dispatcher)およびマーシャラ(marshaler)を含む。
さらなる実施形態においては、本発明は、インターネットアプリケーションを実装するシステムである。このシステムは、各々が定義型を有する一連のアプリケーションオブジェクトおよびメソッドを含むサーバを含む。さらに、前記オブジェクトおよびメソッドを呼び出すクライアント側の一連のスクリプトを生成する生成エンジンが提供され、各スクリプトは前記一連のアプリケーションオブジェクトおよびメソッドのうち少なくとも1つのオブジェクトまたはメソッドに合致する型定義を有する。レスポンスエンジンが、クライアント処理デバイス上の1つまたは複数のスクリプトからのリクエストを受け取るために提供され、前記リクエストを前記アプリケーションオブジェクトおよびメソッドの1つに送信する。
別の側面においては、概説すると、本発明はネットワーク上で動作しているコンピュータ間で非対称に動作する通信プロトコルおよび通信方法を備える。クライアントからサーバへの通信は、データ効率性、およびサーバによる解釈のために最適化される。サーバからクライアントへの通信は、既存のクライアントアプリケーション資源を使用するクライアントによる解釈のために最適化される。
一実施形態において、本発明は、分散処理システムにおけるクライアントプロセスとサーバプロセスとの間の通信方法である。この方法は、そのクライアントプロセスによってサーバに関数リクエストを送信するステップであって、その関数リクエストはリクエストされたサーバ関数の型によって定義されたフォーマットを有するデータ列を含むステップ、そのサーバプロセスによってその関数呼び出しを受け取り、そのデータ列に基づいてそのリクエストされた関数を実行するステップ、および、そのサーバプロセスによってその関数リクエストに対するレスポンスを送信するステップであって、そのレスポンスはサーバオブジェクトにより定義されたクライアントサイド処理フォーマットの形をとるステップを含むことができる。
別の実施形態においては、本発明は、第1のコンピュータと第2のコンピュータとの間の通信プロトコルを備えることができる。このプロトコルは、第2のコンピュータ上の関数のための関数識別子と、その関数のための引数とを含む第1のコンピュータから第2のコンピュータへのリクエストを含むことができる。その引数は、その関数識別子によって呼び出される関数用の型によって定義することができる。このプロトコルはまた、その関数の結果を含む、第2のコンピュータから第1のコンピュータへのレスポンスも含むが、そのレスポンスはスクリプト入力(script input)として定義されたものでる。
別の実施形態においては、本発明は、クライアントとサーバとの間の通信方法である。この実施形態では、この方法は、サーバ上のデータ型にしたがって並べられたパラメータ列を含むリクエスト内のデータをフォーマットするステップ、ネットワークを介してそのリクエスト内のそのデータを送信するステップ、および、スクリプト入力レスポンスフォーマットにしたがってレスポンスデータをフォーマットすることによりそのデータに対するレスポンスを生成するステップを含むことができる。
ネットワーク環境におけるウェブベースアプリケーションを実装する独自のアーキテクチャが提供される。このアーキテクチャは、クライアントおよびサーバの双方に、サーバ上で利用可能なプログラミングインターフェース、関数、およびオブジェクトの一式を提供し、「プロトコル」と呼ばれる独自の通信方法で、クライアントとサーバとの間のデータ通信を最小限に抑える。この通信方法は、提供されたアプリケーションの関数を実行するためのデータを含むように最適化される。本発明を、インターネットを介して提供されるウェブベースアプリケーションへの適用性の観点から、本明細書で説明する。このアーキテクチャの適用性は、インターネット、本明細書で説明される特定の動作環境、または本明細書で説明されるコンピュータ言語に限定されるものではないことは認識されるであろう。
本発明は、本発明の実装の一実施形態として、ウェブベース電子メールサービス、および、ウェブベース電子メールサービスにおいて使用できるスペルチェック関数の提供というコンテキストにおいて例示される。例示的なアプリケーションおよび関数を有する特定の例示的なアーキテクチャによって、本発明のアーキテクチャおよびプロトコルを使用して実装することができるアプリケーションおよび関数の範囲が限定されるものではない。
このアーキテクチャは、独自の非対称なポストプロトコルおよびレスポンスプロトコルを利用する。このポストプロトコルは、型無し(non-typed)データをサーバに提供する一方で、レスポンスプロトコルは、型付きの(typed)スクリプトフォーマットの形でデータを含む。サーバ上に存在するオブジェクトおよびメソッドの各々に対応する、自動生成されたクライアントサイドライブラリが提供される。さらに独自の特徴として、軽量プロトコル(lightweight protocol)が、クライアントとサーバとの間でデータを移動させる。例示的なプロトコルが図8および11に示されている。独自の特徴として、クライアントはサーバに送信されるデータを型付けし、サーバはそのデータのために要求された処理を行う。サーバはスクリプトの形でレスポンスを送信するが、これはデータ構造が既知であるものとして「型付けされている」。
一般に、サーバサイドおよびクライアントサイドコンポーネントを初期化し、インストールするプロセスは、サーバ上で開発され、属性を有するクラスおよびメソッドを含むアプリケーションを必要とし、そのプロセスはクライアント環境およびサーバ環境を生成する。コード生成器(本明細書では、「CodeGen」と呼ばれる)は、開発されたアプリケーション内のオブジェクトおよびコンポーネントの各々のためのサーバサイドコード「プロキシ(proxy)」に加えて、本明細書ではしばしばクライアントサイドプロキシと呼ばれる、Java(登録商標)Scriptクライアントサイドライブラリオブジェクトおよびスタブコンポーネントを生成する。これらの環境が生成され、クライアント環境がインストールされると、ディスパッチャおよびマーシャラを含むサーバサイドサービスは、クライアント上の関数からのデータを、サーバ上の対応するオブジェクトおよび関数に送信する。本発明は、Java(登録商標)Scriptを使用する適用例に関して本明細書では説明されるが、このアーキテクチャは他のスクリプティング環境を組み込むことができることは理解されるであろう。
本発明にしたがうと、開発者は、複数のクラスおよびメソッドを生じさせるアプリケーションをサーバ上に作成する。このアプリケーションがコンパイルされると、例えば、ダイナミックリンクライブラリ(DLL)または実行可能スクリプトオブジェクト(.EXEファイル)が作成される。このアプリケーションのコンパイルに続いて、エクスポートのために開発者によって印を付けられたオブジェクトおよびメソッドについて、CodeGenプロセスは、印を付けられたクラス用にJava(登録商標)Scriptによるオブジェクト、および、印を付けられたメソッド用にJava(登録商標)Scriptによるスタブを生成する。これらのJava(登録商標)Scriptは、ウェブブラウザが使用できる1つまたは複数のJava(登録商標)Scriptファイルにまとめられ、ウェブベースアプリケーションを実装するために、サーバと接続しているクライアントに送信される。
CodeGenプロセスはまた、サーバサイドプロキシ要素を生成する。一実施形態において、CodeGenプロセスはサーバ上で実行されるC#コードを生成するが、これは、サーバ上のオブジェクトおよび関数をクライアント上のオブジェクトおよびスタブに直接マッピングする。CodeGenプロセスはまた、マーシャラ、ディスパッチャ、およびプロキシを生成し、これらによって、クライアント上での呼び出しがサーバサイドコンポーネントを起動できるようになる。サーバで使用するために、この一連のサーバアプリケーションコードが、次いでコンパイルされる。C#の使用も例示的であることに留意されたい。本発明にしたがえば、任意のオブジェクト指向プログラミング言語を利用することができる。
CodeGenプロセスが完了すると、サービスサイドライブラリに対応するクライアントライブラリが生成される。サーバ上に配置されたサービスを呼び出そうとするクライアント開発者は、サービスサイド開発者と同じ方法で、クライアントサイドコンポーネントを直ちに使用することができる。この側面では、サーバ上で利用可能なすべてのオブジェクト、プロトコル、インターフェース、およびAPIがクライアント上で利用できる。
自動生成されたクライアントおよびサーバコードはプロトコル自体を含む。クライアントがローカルクライアントライブラリにあるメソッドを呼び出すと、生成されたローカルJava(登録商標)Scriptスタブが実行される。「代理」として、サーバ要素との相互作用は、実行中透過的である。スタブが実行されると、サーバに存在するアプリケーションにより必要とされる関数内の任意のデータによって、リクエストがサーバに送信されることになる。サーバに送信されるリクエスト内のデータはマーシャリングされる。すなわち、データを収集し、特定の関数またはオブジェクトのために規定されているフォーマットにデータを変換する。この場合、このデータは、サーバ上のマーシャラ(または、この場合では「デマーシャラ(de-marshaler)」)によって理解される、リクエストされたオブジェクトまたはメソッドの型により定義された伝送フォーマットにマーシャリングされる。
サーバ上のマーシャラおよびディスパッチャはリクエストを受け取ると、リクエスト内のデータをアンマーシャリングし、そのリクエストを実際のサーバサイドのオブジェクトまたはメソッドに振り分ける。サービスサイドコードは、次いで、そのリクエストとコンポーネント内に存在する関数とに基づいてレスポンスを生成し、結果データをクライアント上のスクリプトライブラリが解釈できるレスポンスフォーマットの形で、例えば、1つの配列または1つの要素として、クライアントに渡す。クライアント上では、自動生成されたクライアントサイドJava(登録商標)Scriptエンジンがそのレスポンスをアンマーシャリングし、処理を行うクライアントに再び渡す。
クライアントとサーバとの間で使用されるプロトコルは、HTTPプロトコルに基づいていて、XMLHTTPなどのクライアントサイドオブジェクトを使用して制御される。XMLHTTP(Extensible Markup Language Hypertext Transfer Protocol)は、XML、HTMLまたはバイナリデータが、HTTPを使用するインターネットを介してウェブサーバに、およびウェブサーバから伝送されることを可能にする一連のAPIである。XMLHTTPの利点は、ASPまたはCGIプログラムであるファイルに対してクライアントから問い合わせがある場合に、ユーザが繰り返しブラウザを更新することなく、クライアントが透過的に最新の情報を取得するようにXMLHTTPを使用することができることである。このサービスを提供するために、他の種類のオブジェクトを利用することもできる。
クライアントは、呼び出すべきメソッドに関する情報を有する符号化されたURLに対して、HTTPリクエストを送信することにより、サーバ上のメソッドを呼び出す。このURLはサーバサイドで復号化されて、リクエストされたサービスがそのリクエストにアクセスし、要求されたメソッドが呼び出されることを確実にする。このURL自体がリクエストスキーマを符号化する。レスポンスを完了するのに必要なデータは、HTTPリクエストのボディ内で符号化される。
本明細書で説明されるアーキテクチャおよび方法は、複数の処理システム上で実施することができる。本発明を実施するのに適した例示的な処理システムは、図1に示されている。図1は、本発明を実施することができる好適な例示的汎用コンピューティングシステム環境100を示している。コンピューティングシステム環境100は、好適なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に関して何らの制限を示唆するものではない。例示的な動作環境100に示される構成要素のうちのいずれか1つ、あるいはそれらの組合せに関して何らかの依存関係または要件をコンピューティング環境100が有するものと解釈すべきではない。
本発明は、他の多数の汎用または専用コンピューティングシステム環境または構成で動作可能である。本発明とともに使用するのに適した周知のコンピューティングシステム、環境、および/または構成の例として、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラム可能家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、および上記のシステムまたは装置のいずれかを含む分散コンピューティング環境などが挙げられるが、これらに限定されるものではない。
本発明は、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的コンテキストで説明することができる。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明はまた、通信ネットワークを介して接続されるリモート処理装置によってタスクが実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含む、ローカルおよびリモートコンピュータ記憶媒体のどちらにも配置することができる。
図1を参照すると、本発明を実施する例示的なシステムは、コンピュータ110の形態の汎用コンピューティング装置を備える。コンピュータ110のコンポーネントには、処理装置120、システムメモリ130、システムメモリを含む様々なシステムコンポーネントを処理装置120に連結するシステムバス121を含めることができるが、これらに限定されるものではない。システムバス121は、様々なバスアーキテクチャのいずれかを用いるメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含む複数の種類のバス構造のうちのいずれでもよい。例えば、そのようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ電子規格協会(VESA)ローカルバス、およびメザニンバスとしても知られる周辺コンポーネント相互接続(PCI)バスが含まれるが、これらに限定されるものではない。
コンピュータ110は通常、各種のコンピュータ読取り可能媒体を備える。コンピュータ読取り可能媒体は、コンピュータ110によってアクセス可能な任意の利用可能媒体とすることができ、揮発性および不揮発性媒体、着脱可能および着脱不能媒体を含む。例えば、コンピュータ読取り可能媒体として、コンピュータ記憶媒体と通信媒体を挙げることができるが、これらに限定されるものではない。コンピュータ記憶媒体には、コンピュータ読取り可能命令、データ構造、プログラムモジュール、あるいは他のデータなどの情報を記憶するための任意の方法または技法で実施される揮発性および不揮発性媒体、着脱可能および着脱不能媒体が含まれる。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリ、または他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、または他の光学ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶、または他の磁気記憶装置、あるいは、所望の情報を記憶するために使用できコンピュータ110によってアクセスできる他の任意の媒体が含まれるが、これらに限定されるものではない。通信媒体は通常、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他の移送機構などの被変調データ信号として表現したものであり、任意の情報伝達媒体を含む。「被変調データ信号」という用語は、信号中の情報を符号化するような方式で設定または変更された特性の1つまたは複数を有する信号を意味する。例えば、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体と、音波、RF、赤外線および他の無線媒体などの無線媒体とが含まれる。上記の媒体の任意の組合せもコンピュータ読取り可能媒体の範囲に含まれるべきである。
システムメモリ130は、読取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132などの揮発性および/または不揮発性メモリの形態をとるコンピュータ記憶媒体を備える。起動時などにコンピュータ110内の要素間の情報転送を助ける基本ルーチンを含む基本入出力システム(BIOS)133は、通常ROM131に格納される。RAM132は通常、処理装置120が直ちにアクセス可能であり、および/または現在処理装置120に基づいて動作しているデータおよび/またはプログラムモジュールを含む。例えば、図1には、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137が示されているが、これらに限定されるものではない。
コンピュータ110は、他の着脱可能/着脱不能、揮発性/不揮発性のコンピュータ記憶媒体も備えることができる。図1には、着脱不能な不揮発性の磁気媒体に対して読み書きを行うハードディスクドライブ140、着脱可能な不揮発性の磁気ディスク152に対して読み書きを行う磁気ディスクドライブ151、および、CD−ROMまたは他の光学媒体などの着脱可能な不揮発性の光ディスク156に対して読み書きを行う光ディスクドライブ155が例として示されている。例示的な動作環境で使用することができる他の着脱可能/着脱不能、揮発性/不揮発性のコンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体素子RAM、固体素子ROMなどが含まれるが、これらに限定されるものではない。ハードディスクドライブ141は通常、インターフェース140などの着脱不能メモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は通常、インターフェース150などの着脱可能メモリインターフェースを介してシステムバス121に接続される。
上述した、図1に示すドライブおよびそれに関連するコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータの記憶保持をコンピュータ110に提供する。例えば、図1には、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147を格納するハードディスクドライブ141が示されている。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同じであっても異なってもよいことに留意されたい。図1ではそれらが少なくとも異なるコピーであることを示すために、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147には異なる参照符号を付している。ユーザは、キーボード162、および、一般にはマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス161などの入力装置を介してコンピュータ20にコマンドと情報を入力することができる。他の入力装置(図示せず)として、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが挙げられる。これらおよび他の入力装置は、多くの場合、システムバスに連結されたユーザ入力インターフェース160を介して処理装置120に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)など他のインターフェースおよびバス構造によって接続することもできる。モニタ191または他のタイプの表示装置も、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータは、スピーカ197およびプリンタ196などの他の周辺出力装置も備えることができ、それらの装置は、出力周辺インターフェース190を介して接続することができる。
コンピュータ110は、リモートコンピュータ180などの1つまたは複数のリモートコンピュータとの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、あるいは他の共通ネットワークノードとすることができ、図1にはメモリ記憶装置181のみが示されているが、通常、コンピュータ110と関連して上述した多くの要素またはすべての要素を備える。図1に示された論理接続は、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173を含むが、他のネットワークを含むこともできる。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
LANネットワーキング環境で使用される場合、コンピュータ110は、ネットワークインターフェースまたはアダプタ170を介してLAN171に接続される。WANネットワーキング環境で使用される場合、コンピュータ110は通常、インターネットなどのWAN173を介して通信を確立するためのモデム172または他の手段を備える。モデム172は、内蔵型でも外付け型でもよく、ユーザ入力インターフェース160または他の適切な機構を介してシステムバス121に接続することができる。ネットワーク環境では、コンピュータ110に関連して示されたプログラムモジュール、またはその一部は、リモートメモリ記憶装置に格納することができる。例えば、図1には、メモリ装置181に存在するリモートアプリケーションプログラム185が示されているが、これに限定されるものではない。図示したネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段も使用できることは理解されるであろう。
本発明のアーキテクチャを利用するアプリケーションを実装するために、このアーキテクチャのクライアントおよびサーバサイドコンポーネントをインストールしなければならない。図2Aには、本発明にしたがってクライアントサイド環境を生成する最初の方法が示されている。図2Bは、このアーキテクチャの論理的な透視図を示している。
図2Aにおいて、ステップ202で、ウェブアプリケーションの開発者は、サーバ上のツールを使用してウェブベースアプリケーションを作成する。作成されたアプリケーションは、属性を有するメソッドおよびクラスを使用する関数および機能を含む。一実施形態においては、任意の複数のアプリケーションプログラミング言語を使用して開発することができる。図2Aに示される例では、C#プログラミング言語を使用して開発しているが、C#プログラミング言語は、.NETプラットフォームと連動するように設計されたマイクロソフト社製のオブジェクト指向プログラミング言語である。.NETプラットフォームは、分散コンピューティング環境におけるウェブサービスおよびウェブアプリケーションのためのソフトウェアプラットフォームである。アプリケーションおよび機能がステップ202で開発されると、メソッドおよびクラスがサーバ上に配置される。ステップ204で、開発者は、クライアントサイドアプリケーション開発者が利用できるように、エクスポート可能なオブジェクトおよびメソッドとして印を付けることができる。一実施形態においては、サーバサイドで利用可能なすべてのメソッドにエクスポートのための印を付けることができる。ステップ206で、アプリケーションはコンパイルされ、ダイナミックリンクライブラリおよび実行可能ファイルが生成される。アプリケーションがコンパイルされた後、ステップ208で、コード生成(CodeGen)プロセスは、生成されたダイナミックリンクライブラリおよび実行可能ファイルを検証し、ステップ204で印を付けられたクラス用のスクリプトオブジェクトに加え、スクリプトスタブおよびオブジェクトに正確にマッピングし、サーバ上で実行される、対応するサーバコードを生成する。
一実施形態においては、クライアントオブジェクトはJava(登録商標)Scriptの形で生成されるが、他のスクリプト言語を使用することもできる。本発明の1つの独自の特徴は、クライアントデバイスのために、Java(登録商標)Scriptなどのスクリプティング環境内にこのようなオブジェクトを生成することである。スクリプトオブジェクトを使用することによって、クライアント上のウェブブラウザソフトウェアにおける固有のスクリプティングエンジンのユーザが、本明細書で説明されるアーキテクチャを実装できるようになる。ステップ210で、スクリプトクラスは、次いで、1つまたは複数のファイルにまとめられ、その後、ステップ210でクライアントに送信される。
アプリケーションのために開発される新たな関数は、新たなメソッドまたは新たなクラスを生成することができる。その結果、プロセスは一巡してステップ202に戻ることができるので、プロセスは新たな機能が開発されると、サーバ上に実装された新たな機能がクライアント環境に渡されるように、ステップ204から210まで繰り返される。
図2Bは、本発明のアーキテクチャの論理図を例示している。クライアントデバイス上の特定のユーザに対して、環境は比較的に透過的である。クライアントデバイス上では、ユーザは、ウェブベースアプリケーションの形態をとるエンドユーザ機能を利用することになる。一例では、これはマイクロソフト社のホットメールなどのウェブベース電子メールとすることができ、これには、電子メールメッセージングサービス、カレンダ機能および電話帳機能212が含まれる。クライアントサイドレンダリング214は、サーバにより提供されるデータを使用するコンテンツおよびスクリプトスタブ218によって提供される。クライアントサイドおよびサーバサイドの双方のHTTPハンドラ220が、クライアントデバイスとサーバデバイスとの間の通信を処理する。マーシャラ222およびディスパッチャ224が、リクエストを、HTTPハンドラから、CodeGenプロセスによって生成されるオブジェクトモデルコード226へ渡すよう調整する。例えば、クライアントがサーバ上のスペルチェック関数を呼び出す場合、クライアントインターフェースは、実際には、スクリプト配列を受け取るJava(登録商標)Script関数である。クライアント上のマーシャリングプロセス(スタブ214に組み込まれたオブジェクトモデル216により実装される)は、各配列(すなわち、要素または配列群もしくは要素群の組合せ)を受け取り、それを伝送フォーマットに組み立てる。一般に、1つの配列は、コンマ区切りの要素列の形態をとり、各要素は、配列、整数列、または何らかの他の構造とすることができる。サーバ上のマーシャリングプロセスは再帰的であり、配列内の要素を評価する。オブジェクトモデル226およびJava(登録商標)Scriptオブジェクトモデル216は双方とも強く型付けされている(strongly typed)ので、所与のオブジェクトのために送信される配列はその配列内に明確に定義された複数の要素を有し、複数の要素は適切な型を有し、複合型(compound type)の場合は、複合型の適切なフォーマットを有する。オブジェクトモデルは、データ層230およびストアマネージャ228を介して実データ232とやりとりを行う。スタブはサーバオブジェクトモデル226に基づいて生成されるので、スタブはデータ層230に対して型および属性を直接的にマッピングする。
ユーザシステム上のクライアントサイド環境を提供するために、上述したように、1つまたは複数のスクリプトファイルがクライアントコンピューティングデバイスに送信され、そのデバイス上に格納される必要がある。ウェブベースアプリケーションに関して、通常、このようなアプリケーションはサービスプロバイダによって提供される。本発明を構成するアーキテクチャを使用するアプリケーションを提供するサービスプロバイダは、サービスにアクセスするためのログイン名またはアカウントを作成するよう、ユーザに対して要求することができ、そのログイン名またはアカウントの作成ステップを使用してクライアント環境をインストールすることができる。この場合、サービスプロバイダは、ウェブベースサービスもしくはアプリケーションの提供を制御するプロセスを実装するコンピュータ、または、人間と考えることができる。
図3に示されるように、ユーザは、ステップ302で、アカウントまたはログイン名を作成する。ユーザがログイン名の初期設定をすると、ユーザはまず、ステップ304でユーザコンピュータにダウンロードされるアプリケーションJava(登録商標)Scriptファイルをダウンロードすることになる。ステップ306で、ユーザがアプリケーションサーバにより提供されるウェブサービスと対話を始めると、スクリプトエンジンはユーザコンピュータ上のオブジェクトを使用して、本発明のプロトコルを介しサーバサイドアプリケーションのクラスおよびメソッドと通信する。サーバ上で対応するプロセスが実行され、そのプロセスは、ユーザからの特定のサービスまたはアプリケーションのリクエストを受け取り、そのアプリケーションのためのクライアント環境のダウンロードプロセスを開始することが理解されるであろう。
図4は、本発明のアーキテクチャおよびプロトコルを実装する1つの好適なシステムのブロック図である。図4は、図1に示されたコンピューティングデバイス100とすることができるクライアントデバイス460、およびアプリケーションサーバ420を示している。本明細書で使用されるように、「サーバ」または「ネットワークサーバ」には、内部にデータおよびアプリケーションを格納する任意のマシン、もしくは、マシンの組合せが含まれ、すなわち、図4にブロック480として示されているものが含まれる。
クライアントマシンにおいて実行される閲覧ソフトウェア300は、ネットワークインターフェース402を介してアプリケーションサーバ480と通信する。クライアントデバイス460とサーバ480との間の通信は、1つまたは複数のリクエスト402およびレスポンス404に対して、インターネットなどのネットワーク、または、公衆網(public network)と私的ネットワーク(private network)の組合せを介して行われる。クライアントデバイス460とサーバ480との間の通信は通常、HTTPプロトコルを使用するが、本発明は、伝送プロトコルとしてHTTPを使用することに限定されるものではない。
クライアントデバイス480は、レスポンス404の処理の一部を取り扱う伝送コンポーネント410を含む。コンテンツデータが返されると、データは、伝送コンポーネント410から、他のコードレイヤ420を介して、スクリプティングエンジン426およびパーサ(parser)/インタープリタ(interpreter)422に渡される。パーサは、次いで、ユーザインターフェース424を介してユーザに表示するため、コンテンツを解析し、解釈する。パーサ422は、コンテンツがリファレンスの中に組み込まれたいずれかのスクリプトを解釈する必要があるときに、スクリプトエンジン426を呼び出すことができる。コンテンツはまた、伝送コンポーネント内に含まれている、あるいは伝送コンポーネント410と連動する、ストレージマネージャ455を介してアクセスされるローカルストレージ436に格納することができる。
ストレージ436はまた、キャッシュテーブル、データキャッシュ、クッキー、および、上述したJava(登録商標)Scriptファイルを含むJava(登録商標)Scriptコンテナを含むことができる。伝送コンポーネント410は、Java(登録商標)Scriptファイル、および、クッキーなどの他の情報を、例えばクッキーコンテナの中に格納し、および、クッキーコンテナの中から取得するストレージマネージャ455を含むか、もしくは、そのストレージマネージャと連動する。スクリプトマネージャ450は、このアーキテクチャにより提供されるクライアントサイドスクリプトのスタブおよびオブジェクトを実行するスクリプトエンジンからのリクエストを処理する。以下で説明するように、スクリプトマネージャ450は、サーバ480に対する2種類の呼び出し、すなわち、サーバ480上の関数およびオブジェクトを対象とする同期呼び出しおよび非同期呼び出しを処理する。これらのリクエストについては、図13に関連して以下で説明する。
サーバ480は、本発明を実施することができる好適な動作環境492を含むことができる。その動作形態492は、好適な動作環境の一例に過ぎず、本発明のユーザ機能の範囲に関して何らの限定を示唆するものではない。動作環境の一例は、マイクロソフト社から入手できるウィンドウズ(登録商標)群のオペレーティングシステムである。この環境は、デザインおよびランタイムオブジェクトを含むプラットフォームであるアプリケーションフレームワーク460を含むことができ、ウェブサーバ上でアプリケーションが実行されることを可能にするよう制御することができる。このフレームワークは必須ではないが、本明細書で説明される特定のサービスは、フレームワークのコンポーネントとして含まれてもよいし、またはオペレーティングシステムに組み込まれてもよいし、またはオペレーティングシステム内で実行される個別のアプリケーションとして提供されてもよい。アプリケーションフレームワークは、上記で説明されている、マイクロソフト社から入手可能な.NETアプリケーションフレームワークとしてもよい。アプリケーションフレームワークは、本発明と併せて利用することができる暗号化、圧縮および認証などの機能を実装するリソースクラスを含むことができる。
開発されたアプリケーションコンテンツ482、オブジェクト484、およびメソッド486は、アプリケーションフレームワーク内に提供される。アプリケーション489は、1つまたは複数のクラスおよびメソッドから構成される。コンパイラ487は、アプリケーション489用のダイナミックリンクライブラリおよび実行可能ファイルを生成する。CodeGenエンジン495もまたアプリケーションフレームワーク460内に示されている。上述したように、オブジェクトおよびクラスが特定のアプリケーション489のために生成され、コンピュータ487によりコンパイルされると、CodeGenエンジン495は、クライアントサイドスクリプティングオブジェクト、マーシャラ494、ディスパッチャ492およびサーバアプリケーションコード490のいずれも生成することになる。
サーバ上のアプリケーションにおけるメソッドとクラスとの間の相互作用は、サーバサイドオブジェクトとともに生じる。レスポンスがサーバサイド「プロキシ」オブジェクト490に提供され、その後、サーバサイド「プロキシ」オブジェクトは、クライアントサイドプロキシからの呼び出しに基づいてクライアントデバイスにレスポンスを提供する。
CodeGenエンジン495は、「リフレクション」と呼ばれる技術により処理されるよう動作し、ソフトウェアのコンパイルされた部分を分析して、マーシャリング、アンマーシャリング、およびディスパッチングを実行する一連のパーサ、コンバータ、フォーマッタおよびテキストライタ(まとめて「スタブ」)を自動的に生成する。リフレクションメカニズムはアプリケーションフレームワーク内に提供されるものであり、実行時にクラス定義およびオブジェクト定義を発見する技術である。実際には、CodeGenエンジンは、コンパイルされたコードを再コンパイルするコンパイラである。CodeGenエンジンは、CodeGenエンジン固有の状態などの変数およびコンテキスト情報を考慮に入れる。CodeGenのスタブは、自動生成されるフレームワークの一部として、関数を非同期に振り分ける。ハッシュテーブルなどのコレクション型を代理することも可能であるが、この機能は、SOAPでは利用できない。最終的に、CodeGenは、サーバの例外をシームレスにクライアントに反映することができる。結果として得られるJava(登録商標)Scriptスタブは、サーバのアプリケーションクラスおよびオブジェクトの実行時属性定義に合致する定義を含むことになる。
サーバアプリケーションコード490が生成されると、そのコードはサーバ480上のストレージマネージャ455と連動して、データ498にアクセスする。クライアントデバイス460からのリクエストがマーシャラ494により受け取られ、ディスパッチャ492により分配される。リクエストがサーバ480により受け取られると、ディスパッチャは、どの関数をクライアントは実行しようとしているかサーバに伝える。その起動呼び出しは、リクエスト404の一部として、クライアントからの受信リクエストURLの中に組み込まれている。1つの特徴として、URLは.Netネームスペース表現を含む。特定のアプリケーション用のすべてのアプリケーションコードは、ネームスペース「application.namespace」内に存在する。ディスパッチャ492は、その情報を解読する。マーシャラ494は、URLのコンポーネントを分離して各要素を調べ、それが合致したときに、ディスパッチャは、リクエスト内の情報をアプリケーションコード490内の関数に委任する。
図5は、サーバ上で実行されるメソッドを呼び出し、サーバ上からのレスポンスを受け取る、クライアント上で実行されるスペルチェックアプリケーションのための全般的なプロセスを例示するフローチャートである。一般に、クライアントがサーバ上のスペルチェック関数を呼び出す際、クライアントインターフェースは、実際には入力としてスクリプト配列を受け取るスクリプト関数である。スクリプトマネージャは、各配列を受け取って、これをアップストリーム伝送フォーマット(upstream transport format)に組み立てるマーシャリングプロセスを含む。一実施形態においては、そのフォーマットは、対になるブレースの間にコンマ区切りの要素リストが並べられる配列である。
図5に示されるように、スペルチェック関数は、一般に、何らかのユーザとの相互作用によって、ステップ505で起動される。ユーザとの相互作用は、電子メールアプリケーションまたはテキストエディタなどの他のアプリケーションプログラムにおけるその関数の特定の呼び出しとすることができるし、あるいは、ユーザが電子メールメッセージに対して「送信」命令を押す際に、その関数が自動的に呼び出される場合もある。ステップ510で、Java(登録商標)Scriptアプリケーション「check spelling」が、そのアプリケーション内に定義された関数にしたがって、データまたは属性を含むリクエストをサーバサイド関数「check spelling」に対して送信する。ステップ515で、そのデータは、サーバ上の「check spelling」関数用の型付きのフォーマットにマーシャリングされ、ステップ520で、XMLHTTPリクエストが、伝送コンポーネントを介してサーバサイドメソッドに送信される。例示的なリクエストを、図7〜10に関連して以下に示す。
サーバサイドでは、リクエストがアンマーシャリングされ、型付きのオブジェクトに変換される。ステップ525、530、535および540は、アプリケーションサーバ480上で実行される。ステップ525で、リクエストが受け取られると、マーシャラ494およびディスパッチャ492によって操作され、ステップ525で、オブジェクトをサーバ上の特定の関数に振り分ける。次いでステップ530で、呼び出されたメソッドが、リクエストデータを操作して、何らかのレスポンスを返す。ステップ535で、そのレスポンスはJava(登録商標)Scriptレスポンスに変換され、アプリケーションサーバコード490によって、ダウンストリームフォーマット(downstream format)の形でクライアントに伝送される。サーバサイドプロキシが、サーバサイドの関数呼び出しの結果をJava(登録商標)Scriptに変換し、そのスクリプトがクライアントに再び送信され、スクリプトマネージャによって解釈される。スクリプトエンジンが、Java(登録商標)Scriptレスポンス全体を解析し、これを評価する。このような方式では、「デマーシャラ」はクライアント上に必要なく、EVAL関数がアンマーシャリングと同等の処理を行う。
ステップ545および550は、クライアント上で行う。ステップ545でクライアントサイドスクリプトがレスポンスを受信した際、EVAL動作がレスポンスに対して実行されることになる。EVAL関数は、Java(登録商標)Script表現、ステートメント、またはステートメントの連続を表す文字列を受け取る。その表現は、変数および既存のオブジェクトのプロパティを含むことができる。引数が表現を表す場合、EVALはその表現を評価する。引数が1つまたは複数のJava(登録商標)Scriptステートメントを表す場合、EVALはそのステートメントを実行する。ステップ550で、EVAL関数の結果はリクエスト元のスタブに送信される。
図6は、クラス「message header」に対するCodeGenプロセスの出力を例示している。このメッセージヘッダクラスは、電子メールメッセージ内に提供される情報を含むことができる。図6に示されるように、典型的な電子メールメッセージヘッダは、件名、送信元アドレス、送信元の名前、日付、サイズ、メッセージリンクおよびステータスアイコンを含むことができる。C#オブジェクト定義620がサーバ上で生成されるのに対し、Java(登録商標)Scriptオブジェクト定義610はCodeGenプロセスによってクライアント用に生成される。C#オブジェクト定義は、「subject = strSubject, fromAddr = strFromAddr, fromName = strFromName, date = dDate, size = iSize, msgLink = strMsgLink, theIcon = oIcon」という文字列を定義するスクリプトコンストラクタ624に先立って、上記オブジェクトの属性のための属性宣言622を含む。対応するJava(登録商標)Scriptオブジェクト定義は、そのC#オブジェクト定義に対応する要素612に加え、C#オブジェクトを含むサーバ上のネームスペース「serverNamespace」およびメッセージヘッダ関数「messagehdr」に対応する関数定義を含む。
図7は、関数「GetMessages」用の例示的C#インターフェース710および、これに関連するJava(登録商標)Scriptスタブ720を示している。関数GetMessagesは、引数として、上記で定義されたMessageHdrオブジェクトを受け取る。サーバサイドC#インターフェース「get messages」は、サーバ280上にメールボックスを有するユーザ用の特定のユーザフォルダという定義入力を必要とする。クライアントJava(登録商標)Scriptスタブ720は、サーバに対する非同期および同期XMLHTTPリクエストを調整する「gXMLHTTPProxy」として知られるオブジェクトを呼び出す関数を含む。gXMLHTTPProxyの機能は、図13に関連して以下で説明する。図7に示される例では、関数「GetMessages」は、同期リクエストである。
上述したように、サーバに対するリクエストを形成する際、スクリプトマネージャ255は同期または非同期リクエストを処理することができる。同期リクエストでは、以下でさらに詳しく説明するように、クライアントは、HTTPにおける「POST」関数と非常に類似した方式で処理を行う。すなわち、クライアントはサーバサイドメソッドから何らかのデータをリクエストし、レスポンスを待っているが、サーバからのデータが受け取られるまで、クライアントはアプリケーションを中断したままにする。同期リクエストでは、Java(登録商標)Scriptがデータを取得するためにサーバに対して呼び出しを行い、ウェブブラウザ内のJava(登録商標)Scriptに結果が提供されるまで、サーバがレスポンスを返すのを待つ。同期リクエストは原則的にブロッキング呼び出しであり、この場合、サーバがレスポンスを返すまでブラウザは停止している。
非同期リクエストは、すぐにはデータに対して呼び出しを行わない。非同期リクエストはキュー内に配置され、リクエストは、非ブロッキング呼び出しの形で、XMLHTTPオブジェクトを通じてサーバに送信される。例えば、ユーザがウェブブラウザ内に実装されたスペルチェック関数をリクエストする場合、ユーザは、スペルチェック関数がサーバ上で実行されている間に、電子メールをタイプし続けることができる。データが戻ってくると、Java(登録商標)Scriptが呼び出しを受け取り、スペルチェック関数を再び起動する。
図8は、GetMessagesスクリプトおよび関数により生成される例示的リクエスト810およびレスポンス820を示している。アップストリームリクエストは次のようなURLの一般的なフォーマットを必要とする:サーバ + バージョン + サーバネームスペース + クラスID + メソッドID。図8に示される例では、POST動作は、所与のフォルダF000000001に対するGetMessages関数用のリクエストを含む。POSTに対するレスポンスは、スクリプト定義610に直接マップされるMessageHdrのC#オブジェクト定義において定義された要素を含む新たな配列である。例示的なレスポンス820は、アプリケーションサーバから取得したMessageHDRオブジェクトの配列を示している。
そのようなものとして、レスポンスフォーマット(この場合は配列であるが、他のフォーマットを含むこともある)は、クライアント上のスクリプトオブジェクトにとってまさしく既知であり、この場合、そのスクリプトオブジェクトは、配列内の受信データを解析し、クライアント処理デバイスのユーザインターフェースに表示するために、これをいずれかのレンダリングスクリプトに提供する。
図9および10は、アプリケーションフレームワーク460内で実行されているCodeGenプロセス290により生成される追加のオブジェクトおよび関数を例示している。図9および10に示される例は、スペルチェックアプリケーションで利用することができる2つのスペルチェッキングメソッドに関するものである。図9は、関数「checkspellingofword」を例示しているが、これは入力として一単語を受け取り、その綴りをチェックして、綴りが正しいか、または正しくないかの指示を返す。この関数は、真/偽の結果を返す。スクリプトスタブ910は、gXMLHTTPオブジェクトに対する同期呼び出し「EXAMPLEInvokeSync」を例示している。その結果、スクリプト910は、クライアント上のアプリケーションを解放することなく、メソッド920の応答結果を待つ。
図10は、入力として複数の単語を受け取り、文字列をもって応答するインターフェース「checkspelling」1010を例示している。スクリプト関数1020は、追加のフィルタ「dimensionFilter_words」を含むが、これは、呼び出しをプロトコルフォーマットにマーシャリングするスクリプトである。スクリプト1020は、gXMLHTTPオブジェクトに対する例示的な非同期リクエスト呼び出し「EXAMPLEInvokeAsync」である。その結果、スクリプト1020は処理するリクエストをキューに入れ、ブラウザのスクリプティングエンジンを固まらせることなく、結果を待つことになる。スクリプト1020はまた、コールバック関数を備えるスクリプトを含み、これによって、gXMLHTTPプロキシは、クライアントが他の関数を実行させている間に、処理されている、サーバからのレスポンスを待つことができる。
図11は、さらなるインターフェース/スタブ関係を例示している。図12は、図11に示されるインターフェース/スタブ関係に対する例示的なリクエスト/レスポンスを示している。図11には、関数「checkspellingwithsuggestions」に対するインターフェースが示され、このインターフェースは、入力として1つの文(または、文の連続)を受け取り、「suggestions」という文字列をもって応答する。gXMLHTTPオブジェクトの呼び出しは、この例では非同期である。
図11に示された「checkspellingwithsuggestions」関数用の例示的なPOSTリクエストが、図12に示されている。POST関数は、再度、「サーバ + サーバネームスペース + バージョン + クラスID + メソッドID」というフォーマットで提供され、この例では、定義されたプロトコルは、checkSpellingWithSuggestions関数にアクセスできる文字列定義を含む。レスポンスは、2つのネストされた配列からなる新たな配列の形態で提供される。
この配列は、クライアント上のJava(登録商標)Scriptエンジンおよびスクリプティング環境が解釈できる標準的なJava(登録商標)Script配列である。Java(登録商標)Script関数チェックスペリング1120は文字列配列を予想しているので、配列をスクリプティング環境に直接提供することができ、Java(登録商標)Script仮想マシンはその配列を操作することができる。したがって、ブラウザからサーバへ伝送するために、プロトコルは高度に最適化されている。クライアントサイド関数はサーバオブジェクトの型定義を含むので、サーバサイドオブジェクトおよびメソッドに対する呼び出しは、強く型付けされているフォーマットで提供される。データはJava(登録商標)Scriptの形でクライアントに返され、Java(登録商標)Script言語における標準的なEVAL関数によってクライアントサイドで処理することができる。EVAL関数は、そのJava(登録商標)Scriptが関数であるか、配列の生成であるか、またはオブジェクトの生成であるかを判定するので、その評価プロセスの後、そのJava(登録商標)ScriptはJava(登録商標)Scriptオブジェクトモデルにおけるオブジェクトにもなる。
図13は、サーバに対する非同期および同期XMLHTTPリクエストを制御するgXMLHTTPオブジェクトを例示している。まず、ステップ1310で、プロセスは、適切なブラウザ設定であるかどうか、および、ブラウザが本発明のアーキテクチャにおいて使用するのに好適であるかどうかを判定する。ステップ1312で、初期化変数がバージョン、サーバおよびネームスペース識別子を含むオブジェクトに渡される。
そのXMLHTTPオブジェクトは、同期XMLHTTP関数、非同期XMLHTTP関数、ワークアイテムまたはリクエストブロックのスタック、伝送中の現行のリクエストブロック、タイマ、および関数を処理するクッキーをインスタンス化するコンストラクタを含む。
ステップ1314で、メソッドがブラウザの伝送コンポーネント410のHTTPサービスを使用するHTTP通信用のXMLHTTPプロキシをインスタンス化しようとする。次に、ステップ1315で、呼び出しスクリプトの定義に応じて、メソッドは同期または非同期関数を呼び出す。
メソッドが同期XMLHTTPリクエストを呼び出す場合、XMLHTTPメソッドを呼び出すスクリプトスレッドは中断され、XMLHTTPが成功するか、または時間切れになるまでデータを返さない。ステップ1316で、同期XMLHTTPリクエストが、サーバに対するURL呼び出しを生成することにより開始することになるが、この例は、上述したものである。URLが生成されると、ステップ1318で、同期接続が開かれ、ステップ1320で、URLはサーバにポストされる。次いで、メソッドは、単一のパラメータ(レスポンステキスト)とすることができるレスポンスを待つ。レスポンスが受け取られ、または時間切れになると、ステップ1324で、それが呼び出しスクリプトに提供され、スクリプトスレッドは解放される。その後、クライアント上のEVAL関数を使用する上記の説明にしたがって、そのレスポンスを評価することができる。
ステップ1315で、リクエストが非同期XMLHTTPリクエストに関するものである場合、ステップ1330で、非同期XMLHTTPリクエストが、同様にしてURLを生成することにより開始する。この場合、そのURLは、上記の識別コンポーネントに加えて、コールバック関数を含む。このコールバック関数は、非同期呼び出しが完了した後にXMLHTTPプロキシが呼び出すユーザ定義関数である。これは1つのパラメータ(レスポンステキスト)を必要とする。URLが生成された後、ステップ1334で、システムは非同期呼び出しをキューに入れ、ステップ1336で時間切れタイマを設定する。キューに入れるステップ1334は、ステップ1338でサーバにおいて現在実行されているブロックがあるかどうかを判定するディスパッチャ関数を呼び出す。サーバで実行されているブロックがある場合は、関数はステップ1336を監視することにより、スリープ状態に戻る。
キューのスタックが空でない限り、このプロセスにおいてリクエストは存在し、ディスパッチャが処理を完了すると、そのリクエストはディスパッチャを呼び出すという処理を行うことになる。したがって、スタックがすでに空であったとディスパッチャが感知するときは、時間切れウィンドウが呼び出されるだけである。ステップ1338でブロックが空である場合、非同期接続が開かれ、URLがステップ1340でポストされる。その呼び出しがステップ1342でキューに入れられると、コールバックハンドラがステップ1344で開始される。
コールバックハンドラはXMLHTTP動作が完了するのを待ち、コールバックは実行される。ステップ1344でレスポンスが受け取られると、現行のリクエストは、ステップ1346でディスパッチキューから取り除かれ、ステップ1348で、さらにキュー内の待機を解除するように、ディスパッチャが設定される。レスポンスはステップ1350で呼び出しスクリプトに渡される。
上記の本発明の詳細な記載は、例示および説明の目的で提示されたものである。この記載は、網羅的なものではなく、開示した正確な形態に本発明を限定するものでもない。上記の教示に鑑みると、多数の変更形態および変形形態が可能である。本明細書に記載したように、本発明の範囲および内容から逸脱することなく、本発明のアーキテクチャに基づく複数の変形形態が可能である。一実施形態においては、リクエストおよびレスポンスを圧縮および暗号化することができる。
本発明の原理およびその実際的な適用例を最も適切に説明して、それにより、企図される特定の使用に適する様々な実施形態および様々な変更形態において当業者が本発明を最もよく利用できるようにするために、記載された実施形態は選択されている。本発明の範囲は、添付の特許請求の範囲により明確になるであろう。
本発明を実施するための好適なコンピュータハードウェアを示すブロック図である。 本発明の一側面にしたがう、サーバ開発環境のクライアントサイドプロキシを生成する本発明の一般的方法を示すフローチャートである。 本発明のアーキテクチャを示す論理図である。 図2において生成されるプロキシ環境を得るためのクライアントサイドの方法を示す図である。 本発明のアーキテクチャを実装するための好適なシステムの一実施形態を示すブロック図である。 本発明を構成するアーキテクチャを利用して動作するウェブベースアプリケーションのためのクライアントとサーバとの相互作用に関する一実施形態を示すフローチャートである。 サーバサイドオブジェクト定義とクライアントサイドプロキシオブジェクト定義とを比較した図である。 第1の例示的なサーバインターフェースと、メソッドに関連する対応するJava(登録商標)Scriptスタブとを示す図である。 本発明の方法を実施するためのプロトコルを利用する、例示的なサーバに対するクライアントリクエストと、サーバからのレスポンスとを示す図である。 第2の例示的なサーバインターフェースと、メソッドに関連する対応するJava(登録商標)Scriptスタブとを示す図である。 第3の例示的なサーバインターフェースと、メソッドに関連する対応するJava(登録商標)Scriptスタブとを示す図である。 第4の例示的なサーバインターフェースと、メソッドに関連する対応するJava(登録商標)Scriptスタブとを示す図である。 本発明にしたがう、第2の例示的なレスポンスプロトコルにおけるポストを示す図である。 本発明にしたがう、クライアントによる同期および非同期プロキシ呼び出しをクライアントが制御する方法を例示するフローチャートである。
符号の説明
404 アップストリームフォーマット
406 ダウンストリームフォーマット
426 スクリプトエンジン
436 ストレージ
450 スクリプトマネージャ
460 クライアントデバイス
480 サーバ
484 オブジェクト
486 メソッド
489 アプリケーション
490 サーバアプリケーションコード
492 ディスパッチャ
494 マーシャラ
495 CodeGen
610 Java(登録商標)Scriptオブジェクト定義
620 C#オブジェクト定義
710 C#インターフェース
720 Java(登録商標)Scriptスタブ
810、1210 リクエスト
820、1220 レスポンス

Claims (40)

  1. クライアント−サーバ環境におけるネットワークアプリケーションを提供するためのシステムであって、
    サーバ上の一連のアプリケーション関数であって、型定義を含む一連のアプリケーション関数(489)、および、
    スクリプティング環境を定義する一連のクライアント関数であって、前記クライアント関数は前記一連のアプリケーション関数における前記アプリケーション関数の各々に合致する型を含むように定義されている一連のクライアント関数(436)
    を備えたことを特徴とするシステム。
  2. クライアント上に、クライアント関数からサーバ関数へのリクエストを処理するリクエストエンジン(450)をさらに含むことを特徴とする請求項1に記載のシステム。
  3. 前記リクエストエンジン(450)は、リクエストされた前記サーバ関数用の前記型定義に対応するクライアント関数の前記型フォーマットでリクエストを送信することを特徴とする請求項2に記載のシステム。
  4. 前記エンジンは、リクエスト元クライアント関数(426、436)に応答し、前記型定義は、前記クライアント関数内に含まれることを特徴とする請求項2に記載のシステム。
  5. 前記リクエストエンジン(450)は、同期および非同期リクエストを処理するスケジューラを含むことを特徴とする請求項2に記載のシステム。
  6. 前記リクエストエンジン(450)は、前記サーバ関数からレスポンスコールバックを受け取るレスポンスリスナを含むことを特徴とする請求項2に記載のシステム。
  7. 1つまたは複数の型定義(450)は、一連の属性を含むことを特徴とする請求項1に記載のシステム。
  8. 前記一連のクライアント関数(436)は、JavaScript(登録商標)(210)の形で提供されることを特徴とする請求項1に記載のシステム。
  9. 前記サーバ上に、クライアントリクエストに対するレスポンスを提供するコード(490)をさらに含むことを特徴とする請求項1に記載のシステム。
  10. 前記コード(490)は、スクリプトが解析できるフォーマット(406)で前記レスポンスを提供することを特徴とする請求項9に記載のシステム。
  11. 前記コードは、マーシャラ(494)を含むことを特徴とする請求項9に記載のシステム。
  12. 前記コードは、ディスパッチャ(492)を含むことを特徴とする請求項9に記載のシステム。
  13. エクスポートのために特に印の付けられた関数からクライアントサイド関数を生成する生成エンジン(426)をさらに含むことを特徴とする請求項1に記載のシステム。
  14. 前記サーバのためにマーシャラ(494)を生成する生成エンジン(426)をさらに含むことを特徴とする請求項1に記載のシステム。
  15. 前記サーバのためにディスパッチャ(492)を生成する生成エンジン(426)をさらに含むことを特徴とする請求項1に記載のシステム。
  16. インターネット上でウェブアプリケーションを提供するための方法であって、
    定義型を有する関数およびオブジェクトを含むサーバ環境をサーバ上に提供するステップ(202)、
    前記サーバ環境内の対応する関数およびオブジェクトにマッピングする型を有する関数およびオブジェクトをスクリプティング環境(426)に含むクライアント環境を生成するステップ(208)、および、
    前記サーバに前記クライアント環境(426)を提供するステップ(210)
    を備えたことを特徴とする方法。
  17. 前記生成するステップは、スクリプティング言語で前記関数およびオブジェクトを出力するステップ(210)を含むことを特徴とする請求項16に記載の方法。
  18. インターネットアプリケーションを実装するシステムであって、
    各々が定義型を有する一連のアプリケーションオブジェクト(486)およびメソッド(484)を含むサーバ(480)、
    前記オブジェクトおよびメソッドを呼び出すクライアントの一連のスクリプトを生成する生成エンジン(495)であって、各スクリプトは前記一連のアプリケーションオブジェクトおよびメソッドのうちの少なくとも1つのオブジェクトまたはメソッドに合致する型定義を有する生成エンジン、および、
    クライアント処理デバイス上の1つまたは複数のクライアントスクリプトからのリクエストを受け取り、前記リクエストを前記アプリケーションオブジェクトおよびメソッドの1つに送信するレスポンスエンジン(494)
    を備えたことを特徴とするシステム。
  19. 各クライアントスクリプトは、対応するサーバオブジェクトまたはメソッドにマップする定義属性(720)を含むことを特徴とする請求項18に記載のシステム。
  20. 前記生成エンジン(495)は、リフレクティブプロセスであることを特徴とする請求項18に記載のシステム。
  21. 分散処理システムにおけるクライアントプロセスとサーバプロセスとの間の通信方法であって、
    (a)前記クライアントプロセスによって前記サーバに関数リクエストを送信するステップであって、前記関数リクエストはリクエストされたサーバ関数の型によって定義されたフォーマットを有するデータ列を含むステップ(520)、
    (b)前記サーバプロセスによって前記関数呼び出しを受け取り、前記データ列に基づいて前記リクエストされた関数を実行するステップ(530)、および、
    (c)前記サーバプロセスによって前記関数リクエストに対するレスポンスを送信するステップであって、前記レスポンスはオブジェクトにより定義されたクライアントサイド処理フォーマットの形をとるステップ
    を備えたことを特徴とする方法。
  22. 前記クライアントプロセスは、リクエストされた前記関数に対応する型定義(515)を含むことを特徴とする請求項21に記載の通信方法。
  23. 前記送信するステップおよび前記受け取るステップは、HTTPプロトコルを使用して実行されることを特徴とする請求項21に記載の通信方法。
  24. 前記送信するステップ(a)は、URL(810、1210)内の前記関数リクエストを送信するステップを備えたことを特徴とする請求項23に記載の通信方法。
  25. 前記送信するステップ(a)は、関数識別子を含むURL(810)を生成するステップを備えたことを特徴とする請求項24に記載の通信方法。
  26. 前記送信するステップ(a)は、リクエストされた前記関数の型定義にしたがってコンマ区切りで並べられたリストの形をとる前記データ列を含むURL(1210)を生成するステップを備えたことを特徴とする請求項24に記載の通信方法。
  27. 前記URL(810)は、前記プロトコルのバージョン番号を含むことを特徴とする請求項24に記載の通信方法。
  28. 前記送信するステップ(c)は、スクリプトが解釈できるフォーマット(820、1220)で前記レスポンスを送信するステップを備えたことを特徴とする請求項21に記載の通信方法。
  29. 前記送信するステップ(c)は、JavaScriptのフォーマット(710)で前記レスポンスを送信するステップを備えたことを特徴とする請求項28に記載の通信方法。
  30. 前記送信するステップ(c)は、配列(1220)で前記レスポンスを送信するステップを備えたことを特徴とする請求項28に記載の通信方法。
  31. 前記送信するステップ(c)は、ネストされた配列(1220)で前記レスポンスを送信するステップを備えたことを特徴とする請求項28に記載の通信方法。
  32. 前記方法は1つのオブジェクト(610)であることを特徴とする請求項28に記載の通信方法。
  33. 前記方法は複数のオブジェクト(620)のうちの1つのオブジェクトであることを特徴とする請求項32に記載の通信方法。
  34. 前記方法は複数の配列(620)のうちの1つのオブジェクトであることを特徴とする請求項32に記載の通信方法。
  35. 前記方法は複数のプリミティブデータ型(620)のうちの1つのオブジェクトであることを特徴とする請求項32に記載の通信方法。
  36. 前記レスポンスはプリミティブデータ型(620)であることを特徴とする請求項28に記載の通信方法。
  37. 第1のコンピュータと第2のコンピュータとの間の通信プロトコルであって、
    前記第2のコンピュータ上の関数用の関数識別子と、前記関数用の引数とを含む、前記第1のコンピュータから前記第2のコンピュータへのリクエストであって、前記引数は前記関数識別子によって呼び出される関数用の型によって定義されるリクエスト(404、810)、および、
    前記関数の結果を含む、前記第2のコンピュータから前記第1のコンピュータへのレスポンスであって、スクリプト入力として定義されるレスポンス(406、820)
    を備えたことを特徴とする通信プロトコル。
  38. 前記引数(820)は、前記型に基づいて編成されるデータを含むことを特徴とする請求項37に記載のプロトコル。
  39. 前記引数(820)は、呼び出される前記関数の前記型定義にしたがってコンマ区切りで並べられたリストの形をとるデータ列を含むことを特徴とする請求項37に記載のプロトコル。
  40. 前記スクリプト入力(720)は、JavaScriptフォーマットの形をとることを特徴とする請求項37に記載のプロトコル。
JP2005379005A 2005-01-04 2005-12-28 ウェブアプリケーションアーキテクチャ Pending JP2006195979A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/028,915 US20060167981A1 (en) 2005-01-04 2005-01-04 Web application architecture
US11/028,890 US20060149746A1 (en) 2005-01-04 2005-01-04 Web application communication protocol

Publications (1)

Publication Number Publication Date
JP2006195979A true JP2006195979A (ja) 2006-07-27

Family

ID=35929728

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005379005A Pending JP2006195979A (ja) 2005-01-04 2005-12-28 ウェブアプリケーションアーキテクチャ

Country Status (6)

Country Link
EP (1) EP1677488A1 (ja)
JP (1) JP2006195979A (ja)
KR (1) KR20060080132A (ja)
BR (1) BRPI0600004A (ja)
CA (1) CA2531919A1 (ja)
MX (1) MXPA06000106A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990291B2 (en) 2010-07-21 2015-03-24 Empire Technology Development Llc Information processing apparatus, server-client system, and computer program product

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100823132B1 (ko) * 2006-07-13 2008-04-21 삼성전자주식회사 웹 서비스 시스템 및 그 시스템의 통신방법
KR100917458B1 (ko) * 2007-03-21 2009-09-14 주식회사 케이티 추천검색어 제공 방법 및 시스템
US9436482B2 (en) 2009-03-25 2016-09-06 Microsoft Technology Licensing, Llc Input content to application via web browser
CN103713891B (zh) * 2012-10-09 2017-11-24 阿里巴巴集团控股有限公司 一种在移动设备上进行图形渲染的方法和装置
CN103777967B (zh) * 2012-10-17 2017-08-04 阿里巴巴集团控股有限公司 页面返回方法、页面生成方法和装置
GB2519095A (en) * 2013-10-09 2015-04-15 Ibm Improving XML communication
CN104536819A (zh) * 2014-12-29 2015-04-22 同程网络科技股份有限公司 基于web服务的任务调度方法
US10375123B2 (en) * 2015-12-15 2019-08-06 Samsung Electronics Co., Ltd. Synchronous communication session coordination and handling among devices using metadata
CN112055039B (zh) * 2019-06-06 2022-07-26 阿里巴巴集团控股有限公司 数据访问方法、装置、系统及计算设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909542A (en) * 1996-11-20 1999-06-01 Cfi Proservices, Inc. Distributed computing system for executing intercommunicating applications programs
WO2001057663A2 (en) * 2000-02-04 2001-08-09 America Online Incorporated Optimized delivery of web application code

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990291B2 (en) 2010-07-21 2015-03-24 Empire Technology Development Llc Information processing apparatus, server-client system, and computer program product

Also Published As

Publication number Publication date
CA2531919A1 (en) 2006-07-04
EP1677488A1 (en) 2006-07-05
KR20060080132A (ko) 2006-07-07
BRPI0600004A (pt) 2006-09-19
MXPA06000106A (es) 2006-07-19

Similar Documents

Publication Publication Date Title
US20060149746A1 (en) Web application communication protocol
US10831987B2 (en) Computer program product provisioned to non-transitory computer storage of a wireless mobile device
US20060167981A1 (en) Web application architecture
US10554734B2 (en) Runtime generation of application programming interfaces for remote procedure call services
US7117504B2 (en) Application program interface that enables communication for a network software platform
US7730499B2 (en) Protocol agnostic request response pattern
USRE43375E1 (en) System and method for communications in a distributed computing environment
JP2006195979A (ja) ウェブアプリケーションアーキテクチャ
MXPA06000085A (es) Puerta de refrigerador y refrigerardor con la misma.
WO2004077269A2 (en) Creating network services using source code annotations
US8621092B2 (en) Remote portlet consumer with enhanced resource URL processing
Pierce et al. Interoperable Web services for computational portals
US9934029B2 (en) Annotation driven representational state transfer (REST) web services
US20040177112A1 (en) System and method for interprocess services client artifact download
CA2583619A1 (en) Method of and system for data interaction in a web-based database application environment
Pierce et al. Application web services
van Engelen gSOAP 2.7. 10 User Guide
Juneau et al. Java Web Services
Tips Internet Technologies 2
Slamkovic A generic middleware broker for distributed systems integration
Yang Herong's Notes on JSP

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110428

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110930