专利名称::Web应用程序架构的制作方法
技术领域:
:本发明针对提供基于网络的应用程序,尤其可应用于提供基于因特网和Web的应用程序。
背景技术:
:由于基于因特网的应用程序已变得更强大,对于开发者而言,保持无缝、响应的用户体验已成为重要的特点。基于Web的应用程序通常包括服务器上所提供的一项或多项功能,这些功能使用运行于客户计算机上的Web浏览器应用程序来加以访问。为了让客户机(web浏览器)和服务器按高速方式进行通信,要求在它们之间有效率地运用通信协议——通常是HTTP。通常,通过从服务器接收页和功能(通常采取诸如HTML等标记语言的形式),web浏览器呈现对应用程序或该应用程序的功能组件的接口。在一些情况中,浏览器必须利用对关于位于服务器上的页的请求的每个响应,来呈现所接收的数据的新的页。用于提供这类信息的一个公共格式是“超文本传输协议”(HTTP)。通常,web浏览器将使用HTTP中的“GET”或“POST”命令来请求网页;并且,呈现该页所需要的所有信息都将被返回到web浏览器。即使用户只是正在更新页的一个部分,也可能几次重复某些量的数据(例如,呈现页所必需的信息)。虽然已开发技术来通过更新来自web浏览器的简单数据请求而只更新页的一些部分中的数据,但是,这类协议还没有完全灵活到可以允许开发者充分访问基于web的应用程序中可用的基础方法。允许浏览器远程地对远程服务器上的类和对象进行方法调用的客户服务器协议的当前例子包括“简单对象访问协议”(SOAP)和XML-RPC。SOAP和XML-RPC都要求客户机理解传输数据类型。两者都规定在XML中编码参数并返回值,并且通过公共网络协议来传递它们的标准方式。SOAP和XML-RPC主要用于服务器对服务器通信和厚客户机(thickclient)对服务器通信。它们都是冗长的协议,不一定很有效率。特别是,SOAP要求客户机上相对复杂的机制,以便理解从服务器接收的数据并使其对客户机可用。用诸如JavaScript等简单脚本语言难以实现这一点。在web浏览器中使用JavaScript的一个优点是几乎所有web浏览器应用程序都包括允许它们执行脚本的脚本引擎。使用web浏览器的脚本引擎在该架构的客户机一方要求较少的用户化。因此,一种用于改善web浏览器与客户机之间的通信以便启动基于web的应用程序的方法将会是有利的。
发明内容揭示了一种用于第一台计算机与第二台计算机之间的通信的方法和协议、以及一种在客户机-服务器环境中提供网络化应用程序的系统。在一个方面中,概略描述的本发明包括一种用于在客户机-服务器环境中提供网络化应用程序的系统。在一个实施例中,该系统包括服务器上的应用程序功能集,这些应用程序功能包括数据类型定义;以及脚本环境中所定义的客户机功能集。在独特的方面中,这些客户机功能被定义成包括与该应用程序功能集中的每项应用程序功能匹配的类型。在另一个实施例中,本发明是用于在因特网上提供web应用程序的方法。该方法可以包括以下步骤提供包括服务器上的功能和对象的服务器环境,这些对象和功能具有定义的类型;生成包括脚本环境中的功能和对象的客户机环境,该脚本环境中的功能和对象具有映射到服务器环境中对应的功能和对象的类型;以及,向服务器提供客户机环境。在又一个实施例中,本发明是一种用于初始化并安装服务器和客户机组件来提供基于web的应用程序的系统。该系统包括具有拥有属性的对象和方法的服务器应用程序集。代码生成器为每个所述对象和方法提供JavaScript客户机方库和服务器方库。服务器方服务包括将数据从客户机发送到服务器上对应的对象和功能的分派器(dispatcher)和汇集器(marshaler)。在进一步的实施例中,本发明是一种实现因特网应用程序的系统。该系统包括服务器,该服务器包括各具有定义的类型的应用程序对象和方法集。还提供了创建调用所述对象和方法的脚本客户集的生成引擎,每个脚本具有与所述应用程序对象和方法集中的至少一个对象或方法匹配的类型定义。提供响应引擎,以便从客户处理设备上的一个或多个客户脚本接收请求,并将所述请求发送到所述应用程序对象和方法之一。在另一个方面中,概略描述的本发明包括在操作于网络上的各台计算机之间不对称地进行操作的通信协议和方法。为数据效率以及服务器进行的解释而优化从客户机到服务器的通信。通过使用现存的客户机应用程序资源,为客户机进行的解释而优化从服务器到客户机的通信。在一个实施例中,本发明是在分布式处理系统中的客户机进程与服务器进程之间进行通信的方法。该方法可以包括以下步骤通过该客户机进程向服务器发出功能请求,该功能请求包括具有由被请求的某一类型的服务器功能定义的格式的数据串;通过该服务器进程接收功能调用并对该串执行被请求的功能;以及,通过该服务器进程发出对功能请求的响应,该响应采用服务器对象定义的客户机方处理格式。在另一个实施例中,本发明可以包括一种用于第一台计算机与第二台计算机之间的通信的协议。该协议包括从第一台计算机到第二台计算机的请求,该请求包括关于第二台计算机上的功能的功能标识符和关于该功能的自变量。该自变量可以由该功能标识符所调用的功能的类型来定义。该协议也包括从第二台计算机到第一台计算机的答复,该答复包括该功能的结果,该答复被定义为脚本输入。在备选的实施例中,本发明是客户机与服务器之间的通信方法。在这个实施例中,该方法可以包括以下步骤对请求中的数据进行格式化,该请求包括根据服务器上的数据类型排序的参数串;在网络上发送该请求中的数据;以及,通过以脚本输入响应格式对响应数据进行格式化,来创建对数据的响应。图1描绘了适用于实施本发明的计算机硬件的框图。图2是流程图,表现了根据本发明的一个方面的、用于创建服务器开发环境的客户机方代理的本发明的通用方法。图3是用于获得在图2中生成的代理环境的客户机方方法。图4是适用于实施本发明的架构的系统的一个实施例的框图。图5是流程图,表现了关于利用本发明的基础架构进行操作的基于web的应用程序的客户机和服务器交互的一个实施例。图6是服务器方对象定义与客户机方代理对象定义之间的比较。图7是与该方法关联的服务器界面和对应的JavaScript存根(stub)的第一个例子。图8是利用用于实施本发明的方法的协议对服务器的客户机请求和来自服务器的响应的例子。图9是服务器方界面和对应的JavaScript存根的第二个例子。图10是对应的JavaScript存根中的服务器方界面的第三个例子。图11是服务器方界面和对应的JavaScript存根的第四个例子。图12是根据本发明的响应协议中的邮寄(post)的第二个例子。图13是流程图,展示了根据本发明的、供客户机控制客户机执行的同步和异步代理调用的方法。具体实施例方式提供了一种用于在网络化环境中实施基于web的应用程序的独特的架构。该架构为客户机和服务器提供服务器上可用的编程接口、功能和对象的全集,并且最小化客户机与服务器之间采用独特的通信方法(被称作“协议”)的数据通信。该通信方法被优化成包括用于实施所提供的应用程序的功能的数据。这里将按照其对于因特网上所提供的基于web的应用程序的适用性来描述本发明。将会认识到该架构的适用性不局限于因特网——这里所描述的特定操作环境,也不局限于这里所描述的计算语言。将在“提供基于web的电子邮件服务、以及用于基于web的电子邮件服务内的拼写检查功能,作为本发明的实施的一个实施例”的上下文中展示本发明。将会认识到具有示范应用程序和功能的架构的特定举例说明不限制可以使用本发明的架构和协议来加以实施的应用程序和功能的范围。该架构利用不对称的独特的邮寄(post)和响应协议邮寄协议将非类型化的(non-typed)数据提供给服务器,而响应协议包括采用类型化的(typed)和脚本格式的数据。提供自动生成的客户机方库,它们对应于存在于服务器上的每个对象和方法。在另一个独特的方面中,轻量级协议在客户机与服务器之间移动数据。图8和图11示出该协议的例子。在独特的方面中,客户机对发送到服务器的数据类型化,并且,服务器安排数据所要求的处理。服务器以脚本发回响应,它“类型化的”,因为数据结构是已知的。一般而言,用于初始化并安装服务器方和客户机方组件的进程采用服务器上所开发的应用程序——具有拥有属性的类别和方法,并且创建客户机环境和服务器环境。代码生成器(这里被称作“CodeGen”引擎或进程)创建这里经常被称作“客户机方代理”的JavaScript客户机方库对象和存根组件、以及关于所开发的应用程序中的每个对象和组件的服务器方代码“代理”。一旦创建这些环境,并且安装客户机环境,包括分派器和汇集器的服务器方服务就将数据从客户机上的功能发送到服务器上对应的对象和功能。将会理解这里将根据其使用JavaScript的应用程序来描述本发明,但该架构可以结合其他脚本环境。根据本发明,开发者在服务器上创建导致许多类和方法的应用程序。当编译该应用程序时,创建利用动态链接库(DLL)或可执行脚本对象(.exe文件)。在编译该应用程序之后,关于由开发者标记用于输出的对象和方法,CodeGen进程为标记的类创建JavaScript中的对象,并为标记的方法创建JavaScript中的存根。这些JavaScript被封装在web浏览器可以使用的一个或多个JavaScript文件中,并被传送到与服务器连接的客户机,以实施基于web的应用程序。CodeGen进程也创建服务器方代理元素。在一个实施例中,CodeGen进程创建运行于服务器上的C#代码,具有服务器上的对象和功能到客户机上的对象和存根的直接映射。CodeGen进程也创建允许客户机调用激活以服务器方组件的汇集器、分派器和代理。然后,为服务器使用而编译这个服务器应用程序代码集。应该注意,C#的使用也是示范性的。可以根据本发明来利用任何面向对象编程语言。一旦CodeGen进程完成,就已创建与服务方库相对应的客户机库。设法调用位于服务器上的服务的客户机开发者现在有能力按与服务器方开发者所采用的相同的方式来使用客户机方组件。在这个方面中,服务器上可用的所有对象、协议、接口和API在客户机上也可用。自动生成的客户机和服务器代码包含协议本身。当客户机调用本地客户机库中的方法时,执行生成的本地JavaScript存根。作为“代理”,它与服务器元素的交互对于运行时间(runtime)而言是透明的。当存根执行时,应用程序向功能中的服务器要求的任何数据将会导致请求被发送到服务器。汇集(收集)发送到服务器的请求中的数据,将数据转换成为特定的功能或对象规定的格式。在此情况下,它被汇集成服务器上的汇集器(或在此情况下的“散集器”(de-marshaler))所理解的、被请求的对象或方法的类型所定义的传输格式。服务器上的汇集器和分派器获得请求,不汇集(unmarshal)请求中的数据,并将请求分派到实际的服务器方对象或方法。然后,服务方代码根据驻留在组件中的请求和功能来创建响应,并按客户机上的脚本库可以解释的响应格式(例如,作为阵列或元素)将最后得到的数据传回到客户机。在客户机上,自动生成的客户机方JavaScript引擎不汇集(unmarshal)该响应,并将它退还给客户机用于处理。在客户机与服务器之间使用的协议基于HTTP协议,并使用诸如XMLHTTP等客户机方对象来加以管理。XMLHTTP(可扩展标记语言超文本传输协议)是允许XML、HTML或二进制数据使用HTTP而在因特网上被传送至/从Web服务器的API集。XMLHTTP的优点是当从客户机询问是ASP或CGI程序的文件时,可以使用XMLHTTP,以便客户机显然地检索最近的信息,而用户不必重复地刷新浏览器。可以利用其他类型的对象来提供该服务。通过对利用关于要调用的方法的信息加以编码的URL发出HTTP请求,客户机调用服务器上的方法。URL在服务器方被解码,以确保所请求的服务与该请求挂钩,并且,调用要求方法的URL。URL本身编码请求模式。完成响应所必需的数据在该HTTP请求的主体中加以编码。可以对各种处理系统执行这里所描述的架构和方法。图1展示了适用于实施本发明的处理系统的例子。图1展示了可以在其上实施本发明的合适的通用计算系统环境100的例子。计算系统环境100只是合适的计算环境的一个例子,它并不意在对本发明的使用范围或功能性提出任何限制。也不应该将计算环境100解释为具有涉及示范操作环境100中所展示的任何一个部件或部件组合的任何依赖或要求。本发明可利用众多其他的通用或专用计算系统环境或配置来操作。可能适用于本发明的众所周知的计算系统、环境和/或配置的例子包括(但不局限于)个人计算机、服务器计算机、手持设备或便携式设备、多处理器系统、基于微处理器的系统、机顶盒、可编程的消费电子产品、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等。可以在由计算机执行的计算机可执行指令(例如,程序模块)的一般上下文中描述本发明。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。参照图1,用于执行本发明的示范系统包括采取计算机110的形式的通用计算设备。计算机110的组件可以包括(但不局限于)处理单元120、系统存储器130和系统总线121,系统总线121将包括该系统存储器的各种系统组件耦合到处理单元120。系统总线121可以是几种类型的总线结构(包括存储器总线或存储器控制器、外围总线、以及使用各种总线架构中的任何总线架构的局部总线)中的任何总线结构。举例来讲(不作限制),这类架构包括“工业标准结构”(ISA)总线、“微通道结构”(MCA)总线、“增强型ISA”(EISA)总线、“视频电子标准协会”(VESA)局域总线和“外围部件互连”(PCI)总线(也被称作“夹层(Mezzanine)总线”)。计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110存取的任何可用介质,它包括易失性和非易失性介质、可移动和不可移动介质。举例来讲(不作限制),计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括易失性和非易失性的、可移动和不可移动介质,该介质用关于信息(例如,计算机可读指令、数据结构、程序模块或其他数据)存储的任何方法或技术来加以实现。计算机存储介质包括(但不局限于)RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字通用盘(DVD)或其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或可以被用来存储所需信息并可以由计算机110来进行存取的其他任何介质。通信介质通常以调制数据信号(例如,载波或其他传送机制)具体表现计算机可读指令、数据结构、程序模块或其他数据,它包括任何信息传递介质。术语“调制数据信号”意味着一种信号,其一个或多个特征按为该信号中的信息编码的这样一种方式来加以设置或更改。举例来讲(不作限制),通信介质包括有线介质(例如,有线网络或直线连接)和无线介质(例如,声音、RF、红外线和其他无线介质)。以上任何内容的组合也应该被包括在计算机可读介质的范围以内。系统存储器130包括采取易失性和/或非易失性存储器(例如,只读存储器(ROM)131和随机存取存储器(RAM)132)的形式的计算机存储介质。基本输入/输出系统133(BIOS)通常被存储在ROM131中,该基本输入/输出系统包含有助于在计算机110内的各个元件之间传送信息(例如,在启动期间)的基本例程。RAM132通常包含可立即由处理单元120存取并且/或者目前正由处理单元120进行操作的数据和/或程序模块。举例来讲(不作限制),图1展示了操作系统134、应用程序135、其他程序模块136和程序数据137。计算机110也可以包括其他可移动/不可移动的、易失性/非易失性计算机存储介质。只举例来讲,图1展示了从不可移动的非易失性磁介质读取或对其写入的硬盘驱动器140、从可移动的非易失性磁盘152读取或对其写入的磁盘驱动器151,以及从可移动的非易失性光盘156(例如,CDROM或其他光学介质)读取或对其写入的光盘驱动器155。可以被用于该示范操作环境中的其他可移动/不可移动的易失性/非易失性计算机存储介质包括(但不局限于)卡型盒式磁带机、快闪存储卡、数字通用光盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器141通常通过不可移动的存储器接口(例如,接口140)而被连接到系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动的存储器接口(例如,接口150)连接到系统总线121。以上所讨论的和图1中所展示的这些驱动器及其关联的计算机存储介质为计算机110提供计算机可读指令、数据结构、程序模块和其他数据的存储。在图1中,例如,硬盘驱动器141被展示为存储操作系统144、应用程序145、其他程序模块146和程序数据147。注意,这些组件可以等同于或不同于操作系统134、应用程序135、其他程序模块136和程序数据137。这里为操作系统144、应用程序145、其他程序模块146和程序数据147提供不同的号码,以展示它们至少是不同的副本。用户可以通过输入设备(例如,键盘162和通常被称作“鼠标”、“跟踪球”或“触垫”的定点设备161),来将命令和信息输入计算机20。其他输入设备(未示出)可以包括话筒、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪或类似的输入设备。这些和其他的输入设备经常通过被耦合到该系统总线的用户输入接口160而被连接到处理单元120,但也可能由其他接口和总线结构(例如,并行端口、游戏端口或通用串行总线(USB))来加以连接。监视器191或其他类型的显示设备也经由接口(例如,视频接口190)而被连接到系统总线121。除该监视器以外,计算机也可以包括其他外围输出设备(例如,扬声器197和打印机196),这些外围输出设备可以通过输出外围接口190来加以连接。计算机110可以使用与一台或多台远程计算机(例如,远程计算机180)的逻辑连接而在网络化环境中进行操作。远程计算机180可能是个人计算机、服务器、路由器、网络PC、对等设备或其他共同的网络节点,它通常包括以上相对于计算机110而描述的许多或所有这些元件,尽管图1中只展示了记忆存储设备181。图1中所描绘的这些逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其他网络。这类网络环境在办公室、企业范围的计算机网络、内联网和因特网中很普遍。当被用于LAN网络环境中时,计算机110通过网络接口或适配器170而被连接到LAN171。当被用于WAN网络环境中时,计算机110通常包括调制解调器172或用于在WAN173(例如,因特网)上建立通信的其他装置。调制解调器172(可能是内置的,也可能是外置的)可以经由用户输入接口160或其他适当的机制而被连接到系统总线121。在网络化环境中,相对于计算机110或其各个部分而描绘的程序模块可以被存储在该远程记忆存储设备中。举例来讲(不作限制),图1将远程应用程序185展示为驻留在存储设备181上。将会理解所示的这些网络连接起示范的作用,可以使用在这些计算机之间建立通信链路的其他手段。为了实现利用本发明的架构的应用程序,必须安装该架构的客户机和服务器方组件。图2A表现了用于根据本发明来创建客户机方环境的第一种方法。图2B表现了该架构的逻辑透视图。在图2A中,在步骤202中,web应用程序的开发者将使用服务器上的工具来创建基于web的应用程序。所创建的应用程序将包括使用具有属性的方法和类的功能和特征。在一个实施例中,可以任何数量的应用程序编程语言实行开发。在本例中,以C#编程语言实行开发,它是被设计成与.NET平台一起工作的、来自微软的面向对象编程语言。.NET平台是关于在分布式计算环境中实施的web服务和web应用程序的软件平台。一旦在步骤202中开发了应用程序和特征,方法和类就存在于服务器上。在步骤204中,开发者可以将该开发者设法让客户机方应用程序开发者可用的那些对象和方法标记为可输出。在一个实施例中,服务器方可用的所有方法都可以被标记用于输出。在步骤206中,编译应用程序,从而产生动态链接库和可执行文件。在编译应用程序之后,在步骤208中,代码生成(CodeGen)进程检查已被创建的动态链接库和可执行文件,并且创建关于在步骤204中标记的那些类的脚本对象、以及确切地映射到脚本存根和对象的要在服务器上运行的服务器代码等价物。在一个实施例中,用JavaScript创建客户对象,也可以使用其他脚本语言。本发明的一个独特的方面是为客户设备在诸如JavaScript等脚本环境中创建这类对象。脚本对象的运用允许客户机上的web浏览器软件中的本地脚本引擎的用户实施这里所描述的架构。在步骤210中,脚本类随后被封装在一个或多个文件中,再在步骤210中被传送到客户机。为应用程序而开发的新功能可以创建新方法或新类。结果,该进程可以返回到步骤202,以便当开发新特征时,重复步骤204~210,从而将在服务器上实施的新特征传递到客户机环境。图2B展示了本发明的架构的逻辑视图。对于客户设备上的用户而言,环境是相对透明的。在客户设备上,采取基于web的应用程序的形式的终端用户特征将暴露给该用户。在一个例子中,这可以是诸如微软Hotmail等基于web的电子邮件服务,它包括电子邮件消息传递服务、日历功能和联系人功能212。通过使用服务器提供的数据,内容和脚本存根218提供客户机方呈现(rendering)214。客户机方和服务器方的HTTP处理器220处理客户设备与服务器设备之间的通信。汇集器220和分派器224协调将请求从该HTTP处理器提供给CodeGen进程创建的对象模型代码226。例如,当客户机调用服务器上的拼写检查功能时,客户界面实际上是采用脚本阵列的JavaScript功能。客户机上的汇集进程——由置入存根214的对象模型216实施——采用每个阵列(或元素或阵列或元素的组合)并将其建立为传输格式。通常,阵列采取用逗号分开的元素串的形式,其中,每个元素可以是阵列、整数串或某个其他的结构。服务器上的汇集进程是递归的,从而评估该阵列内的元素。对象模型226和JavaScript对象模型216都是强类型化的,所以,为给定对象发送的阵列具有该阵列中定义明确的数量的元素,具有精确类型,并且,对于复合类型,具有复合类型的精确格式。该对象模型经由数据层230和存储管理器228来与实际数据232交互。由于根据服务器对象模型226来创建存根,因此,存根具有类型和属性到数据层230的直接映射。为了在用户系统上提供客户机方环境,如上所述,一个或多个脚本文件需要被发送到客户计算设备并被存储在该设备上。利用基于web的应用程序,通常由服务供应者来提供这类应用程序。使用本发明的基础架构来提供应用程序的服务供应者可以要求用户创建登录(log-in)或帐户来访问服务,并且,可以使用登录或帐户创建步骤来安装客户机环境。在此情况下,服务供应者可以被认为是控制基于web的服务或应用程序的供应的人或计算机实施的进程。在图3中,用户将在步骤300中创建帐户或登录。一旦用户初始化登录,用户的第一经验将是将在步骤302中下载的应用程序JavaScript文件下载到用户的计算机。在步骤304中,当用户开始与应用程序服务器提供的web服务交互时,脚本引擎使用用户计算机上的对象来与服务器方应用程序类和方法通信本发明的协议。将会理解对应的进程在服务器上运行,它从用户那里接收关于特定服务或应用程序的请求,并启动关于该应用程序的客户机环境的下载进程。图4是适用于实施本发明的架构和协议的一个系统的框图。图4表现了可以是图1中所示的计算设备100的客户设备460、以及应用程序服务器420。如这里所使用的“服务器”或“网络服务器”包括具有其上保存的数据和应用程序或如图4所示的标注为480的块的的任何机器或机器组合。在客户机中执行的浏览软件300经由网络接口402与应用程序服务器480进行通信。可以在网络或诸如因特网等公用网和专用网的组合上经由一个或多个请求402和响应404进行客户设备460与服务器480之间的通信。客户设备460与服务器480之间的通信通常使用HTTP协议,但本发明不局限于将HTTP用作传输协议。客户设备480包括操纵响应404的部分处理的传输组件410。当返回内容数据时,数据从传输组件410并通过其他代码层420被传递到脚本引擎426和分析器/解释器422。然后,分析器分析并解释内容,用于经由用户界面424向用户显示。分析器422可以按需要调用脚本引擎426,以解释内容参考中嵌入的任何脚本。内容也可以被存储在经由存储管理器455加以访问的本地存储器436中,存储管理器455被包括在传输组件410内或与传输组件410关联。存储器436也可以包括高速缓存表、数据高速缓存、cookies、以及包括上述JavaScript文件的JavaScript容器。传输组件410包括存储管理器455或与存储管理器455关联,存储管理器455在例如cookie容器中存储并检索JavaScript和其他信息(例如,cookies)。脚本管理器450实施来自脚本引擎的请求,该脚本引擎执行来自该架构提供的客户机方脚本的存根和对象。如下所述,脚本管理器450处理对服务器480的两种类型的调用——针对服务器480上的功能和对象的同步调用和异步调用。以下根据图13来描述这些请求。服务器480可以包括其中可实施本发明的合适的操作环境492。操作环境492只是合适的操作环境的一个例子,并不意在对本发明的使用范围或功能性提出任何限制。操作环境的一个例子是可从微软获得的Windows系列操作系统。该环境可以包括作为包括设计和运行时间对象的平台的应用程序框架460、以及供web服务器上运行的应用程序使用的控制器。虽然不要求框架,但是,这里所描述的某些服务可以被包括作为框架的组件,或者同样可以被结合于操作系统中或被提供为在操作系统中运行的独立的应用程序。应用程序框架可以是如上所述,例如为可从微软公司获得的.NET应用程序框架。应用程序框架可以包括资源类实施功能(例如,可以结合本发明利用的加密、压缩和鉴定)。在应用程序框架内提供的是已开发的应用程序内容482、对象484和方法486。应用程序489可以由一个或多个类和方法组成。编译器487为应用程序489创建动态链接库和可执行文件。在应用程序框架460内也示出CodeGen引擎495。如上所述,一旦对象和类为特定的应用程序489而被创建并由计算机487编译,CodeGen引擎495将创建客户机方脚本对象两者、汇集器494、分派器492和服务器应用程序代码490。利用服务器方对象来进行服务器上的应用程序中的方法与类之间的交互。将响应提供给服务器方“代理”对象490,服务器方“代理”对象490随后根据来自客户机方代理的调用来提供对客户设备的响应。CodeGen引擎495通过称作“反射”(reflection)的技术进行操作,以分析软件的编译部分,来自动产生实施汇集、散集和分派的一套分析器、转换器、格式化器和文本编写器(共同称作“存根”)。反射机制在应用程序框架中被提供,并且是在运行时间发现类和对象定义的技术。实际上,CodeGen引擎是再编译经编译的代码的编译器。CodeGen引擎考虑诸如其自己的条件等变量以及上下文信息。CodeGen的存根异步地分派功能,作为其自动生成的框架的一部分。它也能够代理诸如Hashtables(散列表)等集合类型;这个特点在SOAP中不可用。最后,CodeGen能够以无缝方式将服务器异常传播给客户机。最后得到的JavaScript存根将包括与服务器的应用程序类和对象的运行时间属性定义匹配的定义。一旦创建服务器应用程序代码490,该代码就与服务器480上的存储管理器455相互作用,以访问数据498。来自客户设备460的请求由汇集器494来接收,并由分派器492来分配。当服务器480接收请求时,该分派器告诉服务器客户机正在尝试执行什么功能。请求调用(invocationcall)被置入从客户机接收的请求URL,作为请求404的一部分。在一个方面中,该URL包括.Net名字空间的表示。关于特定应用程序的所有编程代码出现在名字空间“application.namespace”中。分派器492切断该信息。汇集器494分开URL的组件,检查每个元素,并且,当它匹配时,该分派器将请求中的信息委派给应用程序代码490中的那个相应功能。图5是流程图,展示了运行于客户机上的拼写检查应用程序调用运行于服务器上的方法并从服务器接收响应的一般进程。通常,当客户机调用服务器上的拼写检查功能时,客户机界面实际上是把脚本阵列作为输入的脚本功能。脚本管理器包括采用每个阵列并将它建立成上游传输格式的汇集进程。在一个实施例中,该格式是被视作花括号的阵列,其内部元素的逗号分开列表。在图5中,拼写检查功能通常将在步骤505中由某个用户交互来起动。该用户交互可以是对另一个应用程序(例如,电子邮件应用程序或文本编辑器)的专门调用,或者,当用户为电子邮件消息而按下“发送”指令时,可以自动调用该功能。在步骤510中,JavaScript应用程序“检查拼写”将根据那里定义的功能来发出请求,该请求包括关于服务器方功能“检查拼写”的数据或属性。在步骤515中,该数据被汇集成关于服务器上的“检查拼写”功能的类型化格式,并且,在步骤520中,XMLHTTP请求经由传输组件被发送到服务器方方法。以下根据图7-10来展示该请求的例子。在服务器方,请求将被散集并被转换成类型化对象。对应用服务器480执行步骤525、530、535和540。在步骤525中,当接收请求时,它将由汇集器494和分派器492来操作,以便在步骤525中将该对象分派到服务器上的特定功能。然后,所调用的方法将在步骤530中作用于请求数据,并返回某个响应。该响应在步骤535中被转换成JavaScript响应,并由应用程序服务器代码490以下游格式传送到客户机。服务器方代理将服务器方功能调用的结果变为JavaScript,并且,脚本被发送回到客户机并由脚本管理器解释。脚本引擎仔细分析JavaScript响应并评估它。按这个方式,“散集器”在客户机上是不必要的——EVAL功能处理散集的等价物。在客户机上执行步骤545和550。客户机方脚本一旦在步骤545中接收到响应,就将对响应执行EVAL操作。EVAL功能采用表示JavaScript表达式、声明或声明序列的串。该表达式可以包括现存对象的变量和特性。如果自变量表示表达式,那么,EVAL评估表达式。如果自变量表示一个或多个JavaScript声明,那么,EVAL执行这些声明。在步骤550中,EVAL功能的输出被发送到请求存根。图6展示了关于类“消息消息头部”的CodeGen进程的输出。该消息头部类别可以包括电子邮件消息中提供的信息。如图6所示,典型的电子邮件消息头部可以包括主题、发件人地址、发件人姓名、日期、大小、消息链接和状态图标。在服务器上创建C#对象定义620,同时,通过CodeGen(代码生成)进程为客户机创建JavaScript对象定义610。该C#对象定义包括脚本构造器624所遵循的关于对象的上述属性的属性说明622,脚本构造器624定义这些字符串“subject=strSubject,fromAddr=strFromAddr,fromName=strFromName,date=dDate,size=iSize,msgLink=strMsgLink,thelcon=olcon”)。对应的JavaScript对象定义包括从C#对象定义和功能定义到包含C#对象的服务器上的名字空间“serverNamespace”和消息头部功能“messagehdr”的元素612。图7展示了关于功能“GetMessages”的范例C#界面710及其关联的javascript存根720的例子。功能GetMessages把以上定义的MessageHdr对象作为它的自变量。服务器方C#界面“getmessages”要求关于在服务器280上有邮箱的用户的特定用户的文件夹的定义输入。客户机方JavaScript存根720包括调用称作“gXMLHTTPProxy”的对象的功能,它协调对服务器的异步和同步XMLHTTP请求。以下根据图13来讨论gXMLHTTPProxy的功能。在图7的例子中,功能“GetMessages”是同步请求。如上所述,在表达对服务器的请求的过程中,脚本管理器255可以执行同步或异步请求。在同步请求中,如以下进一步详述,客户机将按十分类似于HTTP中的“POST”功能的方式作出反应。也就是说,虽然客户机将从服务器方方法请求一些数据,但它将等待,保持应用程序暂停,直到从服务器接收数据为止。在同步请求中,JavaScript调用服务器来检索数据,并在为web浏览器中的JavaScript提供结果之前等候服务器复原。该同步请求本质上是阻止调用(blockingcall),其中,冻结浏览器,直到服务器复原为止。异步请求不立刻调用数据。异步请求被放置在队列中,并且,请求通过XMLHTTP对象以非阻止调用发送到服务器。例如,如果请求在web浏览器中实施拼写检查功能,那么,可以继续打出电子邮件,同时,在服务器上执行该拼写检查功能。当数据复原时,JavaScript拾取该调用并再次起动拼写检查功能。图8展示了由GetMessages脚本和功能生成的请求810和响应820的例子。上游请求采用按以下格式的URL的通用格式服务器+版本+服务器名字空间+classId+methodId。在图8所示的例子中,POST操作包括关于给定文件夹F000000001的GetMessages功能的请求。对POST的响应是包括MessageHdr的C#对象定义中所定义的元素的新阵列,这些元素被直接映射到脚本定义610。响应例子820示出从应用服务器中检索到的MessageHDR对象的阵列。照此,客户机上的脚本对象确切地知道响应格式(它在此情况下是阵列,但可以包括其他格式),客户机随后可以分析在该阵列中接收到的数据并将其提供给客户机上的任何呈现脚本,用于向客户处理设备的用户界面显示。图9和图10展示了在应用程序框架260中操作的CodeGen进程290所创建的对象和功能的额外例子。图9和图10中的例子是关于可以在拼写检查应用程序中利用的两个拼写检查方法。图9展示了功能“checkspellingofword”,它把单一的词作为输入,检查其拼写,并返回拼写正确与否的指示。该功能返回真/假结果。脚本存根910展示了关于gXMLHTTP对象的同步调用“EXAMPLEInvokeSync”。结果,脚本910将在释放客户机上的应用程序之前等候关于方法920的返回答案。图10展示了把许多词作为输入并利用串响应的界面“检查拼写”1010。脚本功能1020包括额外的过滤器——作为可以将调用汇集成协议格式的脚本的“dimensionFilterwords”。脚本1020是对gXMLHTTP对象的异步请求调用“EXAMPLEInvokeAsync”的例子。结果,脚本1020将排队关于处理的请求并等候结果,而无须冻结浏览器脚本引擎。脚本1020也包括脚本提供回叫功能,从而允许gXMLHTTP代理等候正在运行的来自服务器的响应,同时,客户机继续执行其他功能。图11展示了另一种界面/存根关系。图12表现了关于图11所示的界面/存根关系的请求/响应例子。在图11中,关于功能“checkspellingwithsuggestions”的界面被示出并把句子(或句子序列)作为输入,并且利用“suggestions”的串来响应。gXMLHTTP对象的调用在这个例子中是异步的。图12展示了关于图11所示的checkspellingwithsuggestions功能的示范POST请求。以格式服务器+服务器名字空间+版本+classId+methodId再次提供POST功能,并且,在这个例子中,所定义的协议包括checkSpellingWithSuggestions功能可访问的串定义。在包括两个嵌套阵列的新阵列中提供响应。该阵列是可以由客户机上的JavaScript引擎和脚本环境解释的标准JavaScript阵列。由于JavaScript功能检查拼写1120正在期待串阵列,该阵列可以被直接馈入脚本环境并由JavaScript虚拟机来操作。因此,从浏览器到服务器,协议被高度优化用于传输。以强类型化格式提供对服务器方对象和方法的调用,因为客户机方功能包括服务器对象的类型定义。数据用JavaScript被返回到客户机,并且,它可以用JavaScript语言由标准EVAL功能在客户机方进行EVAL。EVAL功能可以确定JavaScript是功能、阵列的创建、还是对象的创建,以便在评估进程之后,它也成为JavaScript对象模型中的对象。图13展示了控制对服务器的异步和同步XMLHTTP请求的gXMLHTTP对象。最初,在步骤1310中,进程确定确切的浏览器配置以及浏览器是否适用于本发明的架构中。在步骤1312中,初始化变量被传递到对象,该对象包括版本、服务器和名字空间标识。XMLHTTP对象包括构造器,该构造器例示同步XMLHTTP功能、异步XMLHTTP功能、工作项目或请求块的堆栈、使用中的当前请求块、定时器和cookie处理功能。在步骤1314中,方法尝试使用浏览器的传输组件410的HTTP服务来例示关于HTTP通信的XMLHTTP代理。接下来,在步骤1315中,该方法根据调用脚本定义来调用同步或异步功能。如果该方法调用同步XMLHTTP请求,那么,调用XMLHTTP方法的脚本线程被暂停,并且直到XMLHTTP获得成功或超时,才返回数据。在步骤1316中,同步XMLHTTP请求将通过生成对服务器的URL调用来开始——其例子在上面给出。一旦生成URL,在步骤1318中,打开同步连接,并且在步骤1320中将URL邮寄到服务器。随后,该方法等候响应,该响应可能是单一参数——responseText。一旦该响应被接收或超时,它就被提供给调用脚本,并且在步骤1324中释放脚本线程。其后,可以使用客户机上的EVAL功能并根据前述说明来评估该响应。在步骤1315中,如果请求是关于异步XMLHTTP请求,那么,在步骤1330中,同样始于URL的生成。在此情况下,URL除了以上识别的组件以外还包括回叫功能。回叫是在完成异步调用之后XMLHTTP代理调用的用户提供的功能。它采用一个参数——XMLHTTP响应文本。在生成URL之后,在步骤1334中,该系统使异步调用排队并设置超时定时器1336。排队步骤1334调用分派器功能,该分派器功能在步骤1338中确定服务器处是否有当前执行的块。如果有,则该功能通过返回到步骤1336而返回到睡眠状态。只要队列堆栈不是空的,进程中就有请求,并且,一旦它结束,那个请求将照料调用分派器。所以,当它检测到该堆栈已经是空的时,只调用超时窗口。一旦块在步骤1338中是空的,就打开异步连接,并在步骤1340中邮寄URL。一旦在步骤1342中排队调用,就在1344处起动回叫处理程序。该回叫处理程序等候XMLHTTP操作完成,并且,执行回叫。当在1344处接收响应时,从分派队列1346中除去当前的请求,并且,分派器在步骤1348中被设置成进一步退出队列。响应在步骤1350中被传递到调用脚本。出于举例说明和描述的目的,呈现了本发明的前述详细说明。并不意在彻底详尽或将本发明局限于所揭示的精确形式。可以按照以上教导进行许多修改和变更。如这里指出的,在不脱离本发明的范围和内容的前提下,可能存在关于本发明的架构的众多变更。在一个实施例中,可以压缩并加密请求和响应。选择所描述的实施例,以便最好地解释本发明的原理及其实际应用,从而允许本领域的其他技术人员最好地利用各个实施例中的和具有适合所预期的特定运用的各种修改的本发明。本发明的范围意在由所附权利要求书来定义。权利要求1.一种用于在客户机-服务器环境中提供网络化应用程序的系统,其特征在于,包括所述服务器上的应用程序功能集(489),所述应用程序功能包括类型定义;以及定义脚本环境的客户机功能集(436),所述客户机功能被定义成包括与所述应用程序功能集中的每项应用程序功能匹配的类型。2.如权利要求1所述的系统,其特征在于,还包括所述客户机上的请求引擎(450),它处理从客户机功能到服务器功能的请求。3.如权利要求2所述的系统,其特征在于,所述请求引擎(450)以与所请求的服务器功能的类型定义相对应的客户机功能的类型格式(404)提交请求。4.如权利要求2所述的系统,其特征在于,所述引擎响应于请求客户机功能(426、436),并且,所述类型定义被包含在所述客户机功能中。5.如权利要求2所述的系统,其特征在于,所述请求引擎(450)包括处理同步和异步请求的调度器。6.如权利要求2所述的系统,其特征在于,所述请求引擎(450)包括从所述服务器功能接收响应回叫的响应监听器。7.如权利要求1所述的系统,其特征在于,一个或多个类型定义(450)包括属性集。8.如权利要求1所述的系统,其特征在于,所述客户机功能集(436)是用JavaScript(210)提供的。9.如权利要求1所述的系统,其特征在于,还包括代码(490),它提供对所述服务器上的客户机请求的响应。10.如权利要求9所述的系统,其特征在于,所述代码(490)以脚本可分析格式(406)提供所述响应。11.如权利要求9所述的系统,其特征在于,所述代码包括汇集器(494)。12.如权利要求9所述的系统,其特征在于,所述代码包括分派器(492)。13.如权利要求1所述的系统,其特征在于,还包括生成引擎(426),它从被明确标记用于输出的功能中创建客户机方功能。14.如权利要求1所述的系统,其特征在于,还包括生成引擎(426),它为所述服务器创建汇集器(494)。15.如权利要求1所述的系统,其特征在于,还包括生成引擎(426),它为所述服务器创建分派器(492)。16.一种用于在因特网上提供web应用程序的方法,其特征在于,包括提供(202)包括服务器上的功能和对象的服务器环境,所述对象和功能具有定义的类型;生成(208)包括脚本环境(426)中的功能和对象的客户机环境,所述脚本环境中的功能和对象具有映射到所述服务器环境中对应的功能和对象的类型;以及,为所述服务器提供(210)所述客户机环境(426)。17.如权利要求16所述的方法,其特征在于,所述生成步骤包括用脚本语言输出(210)所述功能和对象。18.一种实现因特网应用程序的系统,其特征在于,包括服务器(480),它包括各自具有定义类型的应用程序对象(486)和方法(484)的集合;生成引擎(495),它创建调用所述对象和方法的客户机脚本集,每个脚本具有与所述应用程序对象和方法的集合中的至少一个对象或方法匹配的类型定义;以及,响应引擎(494),它从客户机处理设备上的一个或多个客户机脚本接收请求,并将所述请求路由到所述应用程序对象和方法之一。19.如权利要求18所述的系统,其特征在于,每个客户机脚本包括被映射到对应的服务器对象或方法的定义的属性(720)。20.如权利要求18所述的系统,其特征在于所述生成引擎(495)是反射进程。21.一种在分布式处理系统中的客户机进程与服务器进程之间的通信方法,其特征在于,包括以下步骤(a)由所述客户机进程向所述服务器发出(520)功能请求,所述功能请求包括具有由所请求的服务器功能的类型所定义的格式的数据串;(b)由所述服务器进程接收所述功能调用,并对所述串执行(530)所请求的功能;以及(c)由所述服务器进程发出(540)对所述功能请求的响应,所述响应采用由所述对象定义的客户机方处理格式。22.如权利要求21所述的通信方法,其特征在于,所述客户机进程包括与所请求的功能相对应的类型定义(515)。23.如权利要求21所述的通信方法,其特征在于,所述发出和接收步骤是使用HTTP协议来执行的。24.如权利要求23所述的通信方法,其特征在于,所述发出步骤(a)包括在URL(810、1210)中发出所述功能请求。25.如权利要求24所述的通信方法,其特征在于,所述发出步骤(a)包括生成包括功能标识符的URL(810)。26.如权利要求24所述的通信方法,其特征在于,所述发出步骤(a)包括生成包括按所请求的功能的类型定义排序的以逗号分开的列表中的所述数据串的URL(1210)。27.如权利要求24所述的通信方法,其特征在于,所述URL(810)包含协议的版本号。28.如权利要求21所述的通信方法,其特征在于,所述发出步骤(c)包括用可以由脚本解释的格式(820、1220)发出所述响应。29.如权利要求28所述的通信方法,其特征在于,所述发出步骤(c)包括以JavaScript格式(710)发出所述响应。30.如权利要求28所述的通信方法,其特征在于,所述发出步骤(c)包括在阵列(1220)中发出所述响应。31.如权利要求28中所述的通信方法,其特征在于,所述发出步骤(c)包括在嵌套阵列(1220)中发出所述响应。32.如权利要求28所述的通信方法,其特征在于,所述方法是对象(610)。33.如权利要求32所述的通信方法,其特征在于,所述方法是对象(620)中的一个对象。34.如权利要求32所述的通信方法,其特征在于,所述方法是阵列(620)的对象。35.如权利要求32所述的通信方法,其特征在于,原语数据类型(620)的对象。36.如权利要求28所述的通信方法,其特征在于,所述响应是原语数据类型(620)。37.一种用于第一计算机与第二计算机之间的通信的协议,其特征在于,包括从所述第一计算机到所述第二计算机的请求(404、810),包括关于所述第二计算机上的功能的功能标识符以及关于所述功能的自变量,所述自变量是由所述功能标识符调用的功能的类型来定义的;以及包括所述功能的结果的从所述第二计算机到所述第一计算机的答复(406、820),所述答复被定义为脚本输入。38.如权利要求37所述的协议,其特征在于,所述自变量(820)包括基于所述类型组织的数据。39.如权利要求37所述的协议,其特征在于,所述自变量(820)包括按所调用的功能的类型定义排序的逗号分开的列表中的数据串。40.如权利要求37所述的协议,其特征在于,所述脚本输入(720)是JavaScript格式。全文摘要揭示了一种用于第一计算机与第二计算机之间的通信的方法和协议、以及在客户机-服务器环境中提供网络化应用程序的系统。协议包括从第一计算机到第二计算机的请求,该请求包括关于第二计算机上的功能的功能标识符以及关于该功能的自变量。该自变量可以由该功能标识符调用的功能的类型来定义。协议也包括从第二计算机到第一计算机的、包括该功能的结果的答复,该答复被定义为关于第一计算机的脚本输入。在客户机-服务器环境中提供网络化应用程序的系统包括服务器上的应用程序功能集,这些应用程序功能包括数据类型定义;以及定义脚本环境的客户机功能集。这些客户机功能被定义成包括与服务器上的每项应用程序功能匹配的类型。文档编号H04L29/06GK1809068SQ200610002508公开日2006年7月26日申请日期2006年1月4日优先权日2005年1月4日发明者A·班索德,黄振裕,W·C·胡苏申请人:微软公司