面向对象发现框架
发明背景
动态地发现计算机网络上的设备和web服务是一个常见的问题,在设备经常来去不定的网络——例如具有便携式设备的网络中尤甚。该问题在于识别添加到网络的新设备和向这些新设备标识已连接到该网络的设备两方面中。一般而言,必须知晓每个设备的地址(例如,网际协议(IP)地址)才能与该设备连接。如果地址被写在设备上或在相关联的信息文档中,则可随网络上的其它设备手动地记录该地址。
还有一般被称为“发现协议”的各种方法或算法用于自动解决此问题。WS-发现(WS-D)是现在正变得流行的一种,且还有正在使用的多种其它方法。虽然这些方法描述怎样发现网络上的设备,但这些方法通常容易出错并且开发者要正当地实现是十分困难的,对于想被发现的设备和服务尤为如此。
有许多是全有线线路级协议的发现协议(例如,通用即插即用(UPnP)、WS-D)。因此,这些协议定义被传输的消息的格式和序列,但是没有哪一个为想要嵌入此类发现协议的应用——即,想要变成可发现的或想要使用发现来找到其它可发现组件的应用——定义编程接口。作为结果,通常要求应用设计者设计专用于该协议的库,这通常还要求改变程序流以纳入该专用协议。另一个焦点在于改变发现协议(例如,从UPnP到WSDP)给应用设计者造成了主要的返工-即使新的发现协议的功能与旧的那一个相类似或相同。
概述
编程框架允许开发者为服务和设备编写可被与网络上的其它设备和服务相关联的应用自动“发现”的应用。发现的复杂度问题通过提供面向对象框架来缓和,其从实际应用中抽象出因发现协议而异的问题,并使得开发者能够简单地从一般可发现类导出应用或web服务对象或将其基于一般可发现类、通过向该应用附加属性来对其进行配置以使得该应用在网络上是可发现的。这允许应用设计者不要求对任何特定发现过程或协议有详细知识也能嵌入发现过程。发现是通过将应用或web服务对象基于可发现类以及向应用或对象添加简单的注记或属性来实现的。这种小规模的纳入使得在应用的过程流和编程逻辑上的牵连最小化。
使用该发现框架,应用设计者只需要知晓极少的发现相关概念而不需知晓任何协议详情。这允许任何应用设计者无需更多的学习和设计成本就能将发现过程嵌入应用中。该发现框架对其被嵌入其中的应用强加极少的要求,由此几乎每个应用都可被转换成“可发现的”应用。发现协议相关的详情对应用本身是隐藏的,由此不影响应用就能够完成发现协议的交换。这减少了维护和测试成本。
提供本概述是为了以简化形式介绍将在以下详细描述中进一步描述的概念的选集。本概述并非旨在标识出要求保护的主题的关键特征或必要特征,亦非旨在用于限定要求保护的主题的范围。要求保护的主题的其它特征、详情、效用、以及优势将从以下对如在附图中进一步示出和在所附权利要求中定义的各实施例和实现的更具体的书面详细描述中变得显而易见。
附图简述
图1是采用如本文所描述的发现框架的计算机网络的示意图。
图2是将面向对象编程结构与本文所描述的发现框架进行比较的示意图。
图3是在发现类的实例化之际执行的为使设备和服务变成在网络上可发现的一系列发现操作的流程图。
图4是应用、可发现类、网络、以及其它应用之间的接口的示意图。
图5是可用于实现该发现框架的通用计算机系统的示意图。
发明详细描述
“发现”是对于用于标识和接口计算机网络上的设备、应用、和服务的多种协议之一的通称。组网的计算机系统100中的发现的概念在图1中示出。计算机系统100是典型的办公室或商务环境中的局域网(LAN)。然而,发现并不被限定于商务LAN而是在任何网络——局域或广域或虚拟、有线或无线——上实现的协议。
在图1中,例如以太网络等的网络102将例如文件服务器等的中央服务器计算机104连接到一个或多个客户机计算机106。该网络允许客户机计算机106与服务器计算机104互动,例如检索多用户可访问的文件或应用或与外部网络例如因特网连接,在常见实例中,中央服务器计算机104充当到其它网络的网关。
其它组件和设备也连接到网络102以允许连接到网络102的所有客户机计算机106访问藉其所提供的设备或服务。可被附连到网络102的典型设备可包括如图1中所示的打印机108、扫描仪110、传真发送机器(传真机)112。
为了使客户机计算机106能与网络102上的其它设备互动,例如,通过发送要打印的文档与打印机108互动,客户机计算机106必须首先能够定位打印机108,即客户机计算机106必须知道打印机108的地址。此外,即使客户机计算机106知道打印机108的地址,客户机计算机106还必须知道如何向打印机108发话以发送用于打印的数据和指令,即,客户机计算机106和打印机108必须使用相同的语言。
今天大多数应用软件是使用面向对象编程语言来编写的。根据当前描述的实现,可向附连到网络102的每个设备提供作为控制该特定设备的应用软件的一部分而附加的发现类。当应用程序被实例化时,发现类创建为该应用所特有的发现对象。发现对象向当前也被实例化并与该网络连接的任何其它设备或应用宣布该应用的实例化。
如图1所示,连接到该网络的每个设备都包括具有发现对象的相应应用。控制连接到网络102的外围设备的应用软件可包括在实例化之际创建发现对象的发现类。例如,打印机108可由具有发现对象118的打印机控制应用控制;扫描仪110可由具有相关联的发现对象120的扫描仪控制应用控制;而传真机110可由具有相应发现对象122的传真机控制应用控制。
发现对象不仅可被包括在控制像打印机108之类的外围设备的应用中,而且还可被包括在以任何方式控制设备的任何应用中,例如在客户机计算机106上运行的文字处理软件。由此,在客户机计算机106上运行的每个应用都可具有相关联的发现对象116。类似地,在服务器计算机104上运行的网络应用在这些网络应用被实例化时可包括网络发现对象114。
图2中的示意图示出任意性对象和与控制设备或其它组件以使该组件可发现的应用相关联的发现对象的状态之间的关系。一般而言,任意性对象具有生命周期。构造函数202创建类的新实例(或对象)。其初始化所有变量并且完成准备该对象以供使用所必需的任何工作。一旦对象被实例化,其留在功能状态204,在此状态下该对象中的一个或多个方法可被该对象或其它对象调用以执行这些方法所定义的任何功能。在对象被创建后当其不再被需要时调用析构函数206。析构函数206终止该对象的功能并且可以例如从系统存储器中移除该对象以释放空间用于其它操作。
在发现框架中通过提供基类(在像C++、C#、VB、J#及其它语言中可使用)例如“DISCOVERABLECLASS”来利用与面向对象编程的这种关系。任何想要变为可发现的并且由此使得其相关联的设备可发现的应用都可使类基于DISCOVERABLECLASS。以此方式,当在应用的实例化之际创建对象时,就创建DISCOVERABLECLASS的实例,即,发现对象变成起作用的应用的一部分。
发现对象首先向网络发送因服务协议而异的宣告208。宣告208由此是在类的实例化之际自动发生的构造函数202执行的功能。一旦被实例化,发现对象一般处在控制状态210,例如,其中方法204控制另一个应用或设备或提供接口以允许由另一个应用或设备来控制该发现对象。例如,打印机的控制应用可接收来自客户机计算机上的应用的打印命令。打印机被控制并且客户机计算机应用是控制方。客户机计算机应用的发现对象使用发现标识信息来定位与打印机相关联的发现对象。一旦找到与打印机相关联的发现对象,其就提供通信地址。该通信地址随后可被客户机应用使用以向打印机发送控制消息。当发现对象被销毁(或显式地或由废收程序隐式地),析构函数206向网络发送离开、符号结束、或不可用通知112。
以下阐述任意性的示例性类(以.net c#代码形式)的示例。
namespace TestApplication
{
public class TestApplication
{
public TestApplication()
{
}
public string HelloWorld()
{
return″Hello World″;
}
}
}
如果“TESTAPPLICATION”类被实例化并且对象被调用,则该类仅返回字串“HelloWorld”。
向该示例性类简单地添加标识消息使得该类或相关联的应用能被包括DISCOVERABLECLASS类的其它应用发现(加粗线指示修改)。
namespace TestApplication
{
[DiscoverableInterface(″iInterface1″)]
[DiscoverableNamespace(″urn:microsoft.test″)]
public class TestApplication:DiscoverableClass
{
public TestApplication()
{
}
[ControlMethod]
public string HelloWorld()
{
return″Hello World″;
}
}
}
该TESTAPPLICATION类现在是基于DISCOVERABLECLASS的,因此DISCOVERABLECLASS现在与TestApplication相关联并且当TestApplication被实例化时也被实例化。“CONTROLMETHOD”是指示该HelloWorld方法作为控制方法向客户机应用曝露并由此变成这些应用的接口的一部分的属性(Microsoft.net中的标准属性)。
示例性属性“DISCOVERERABLEINTERFACE”和“DISCOVERERABLENAMESPACE”用于标识或表征以及定位网络上的应用或设备。这些属性在图1中由为相关联的设备标记的标识信息来表示。此标识信息在网络发现对象114、任何客户机应用发现对象116、打印机发现对象118、扫描仪发现对象120、以及传真机发现对象122的每一者中表示为“名称”和“类型”或“位置”信息。
在以上的TestApplication类示例中,DISCOVERERABLEINTERFACE持有值“iInterfacel”,其表示任意性设备类型表征。例如,如果该设备是打印机,则该表征可仅为“printer”;替代地如果该设备是DVD驱动器,则该表征可为“DVDInterface”。类似地,在以上示例中,DISCOVERERABLENAMESPACE持有值“urn:microsoft.test”,其是统一的资源标识符,在此表示与特定制造商的产品的任意性关联。例如,可藉由相关联的型号或制造商标识将网络上的多个打印机与其它打印机区别开来。替代地,DISCOVERERABLENAMESPACE可以是位置,例如,固定IP地址或网络位置,例如,“Bob的办公室”。向标准化组织提交表征属性和某些实际值,例如因产品而异的值,以确保设备和应用的标识的统一性可能是适当的。
应当很明显的是,任何数目的一个或多个标识或表征属性可被包括在类中以向网络标识相应的应用或设备。通过对示例性类应用这些改变——其为对编程逻辑没有影响的类属性——就使得示例性类在网络上是可发现的。由此,如由以上增强后的TESTAPPLICATION类代码所提供示例中那样,该网络中的其它应用可通过在“urn:microsoft.test”世界中搜索实现名称为“iInterfacel”的接口的服务来找到该示例性类。
图3描绘在发现类的实例化之际执行的为使设备和服务变为在网络上可发现的一系列示例性发现操作300。最初,在基操作302中,令设备或服务应用至少部分地基于可发现类。在实例化操作304中,应用实例化并且相应地创建发现类的实例,即发现对象。该发现对象在读操作306中读取标识和表征属性。这些属性由设计者如上所述地无害地放置在应用代码中。
发现对象接下来在宣告操作308中在网络上宣告该应用的存在。例如,在打印机的情形中,发现对象将向网络广播打印机的特征,例如,其标识和位置信息。在宣告应用被实例化的同时,网络上的其它应用可将该宣告应用的特征信息存储在例如查找表中。以此方式,其它应用此后可将控制功能请求寻址到该宣告应用。一旦某应用被实例化,就可在控制操作310中使用标准方法(例如,web服务)来执行或是由该应用本身或是由网络上的其它应用所生成的控制方法。
当应用在析构操作312中终止时,发现对象进一步在最后的宣告操作314中向网络宣告该应用的不可用性。在收到不可用性宣告之际,发现类的在该网络上的其它应用中起作用的实例可更新它们对该网络上的应用的注册以将该析构中的应用作为不可用的而移除。以此方式,为网络上的每个应用所共有的面向对象发现框架在任意给定时刻动态地更新网络上可用的设备或服务。
图4中描绘应用402、发现对象404、网络406、和连接到该网络406的其它应用408之间的示例性发现接口。图4的图提供常见的发现方法以及与使用本文所描述的面向对象发现框架的应用的关系的代表性纵览。
这些方法被示为发现功能或事件的分开线程。每个线程由虚线分开。如上所述,应用的类可以是基于由发现框架提供的DISCOVERABLECLASS的。DISCOVERABLECLASS可专用于特定的发现协议,例如UPnP或WS-D,或其可被一般地编写以与可被实现以控制任意给定网络上的设备或服务的多种协议一同工作。该类还包括某些发现属性,如DISCOVERERABLEINTERFACE和DISCOVERERABLENAMESPACE。应注意,如果应用仅仅想使用发现框架来发现其它可发现的组件同时保持对该网络匿名,则其不需要包含这些属性。
在第一线程410中,应用402被启动并且该应用的类被创建。该应用的类是基于DISCOVERABLECLASS的,这导致DISCOVERABLECLASS的实例即发现对象404也被创建。当发现对象404被创建时,其从应用类读取发现属性(例如,DISCOVERERABLEINTERFACE和DISCOVERERABLENAMESPACE)并存储这些属性。发现对象404构造函数随后使用这些发现属性生成因发现协议而异的宣告并将该宣告传递至网络406。随后在网络406上向该网络上的其它应用408广播该宣告。
应用402现在是处在“已实例化”状态并且执行其正常功能。在第二线程412中,发现对象404接收来自网络406上的另一个应用408的传入的因发现协议而异的查询。发现对象404访问在之前的创建步骤中所保存的发现属性,由此其不需要中断应用402的正常功能就能够处置该查询。发现对象404能够取决于传入请求查询中的特征属性是否与发现对象404所持有的应用402的属性相匹配来确定是回答该查询(如图所示)还是不回答。
发现框架对具体询问遵循相同的协议,其在图4的第三线程414中表示。具体查询不同于常规查询之处在于其是通过网络406直接向应用402发送的,这与向整个网络406广播查询正相反。具体查询在例如可发现应用402的地址已知但其它发现属性未知的情况下使用。发现对象404可通过提供由发现对象404在实例化之际持有的任何其它发现属性来直接回答该具体查询。
在第四线程416中,应用402可能需要发现网络406上的另一个组件或应用。为便于此需要,发现框架提供使用类似于发现属性的参数的“搜索”功能。发现对象404使用发现框架的这些参数生成因发现协议而异的查询并且将该查询传递给网络406,在此向该网络上的所有其它应用408广播该查询。对于该查询的任何响应都从其它应用408通过网络406传递给发现对象404。发现对象404收集所有对于该查询的响应(或等待直到超时)并且将这些响应作为搜索功能的结果返回给应用402。
发现框架还提供检索网络上的已知可发现组件或应用的发现属性的功能,如第五线程418中所示。在有来自应用402的要标识网络406上的另一个应用或组件的请求之际,发现对象404生成因发现协议而异的查询并且将其通过网络406发送到网络406上的另一应用408的具体地址。发现对象随后等待回应(或超时)并且将通过网络406从该另一应用408接收到的响应于该具体查询的任何发现属性返回给应用402。
发现框架还便于对可发现应用或组件的控制。控制一般由标准机制(例如,web服务)通过在应用设计时为可发现应用或组件生成的代理代码来提供。在设计时,使用在应用402内为可发现应用或组件生成代理类(即,将控制消息映射到应用402的类和方法的代码)的编程工具。第六线程420描述应用402使用该类和其方法来接口发现对象404以检索其它应用408的特征信息以经由网络406传送因发现协议而异的控制消息来控制其它应用和相关组件408。
同样,发现框架辅助其它应用或组件控制应用402,如第七线程422中所示。经由网络406接收到的来自其它应用408的控制消息被映射到该应用或组件所曝露的功能。各功能是由该应用或组件通过纳入标识在收到控制消息之际要调用的特定方法的属性——例如在以上的源代码示例中所示的CONTROLMETHOD属性来曝露。当接收到控制消息时,发现对象404查找处置该特定控制消息的方法并且调用该方法来控制应用402。
发现框架还支持发送事件,如第八线程424中所示。事件一般是对感兴趣的各方的异步公布/订阅通知。例如,事件通知可涉及订单的送货或电子邮件的到达。当应用402发信号通知有事件时,向发现对象404咨询用于该事件的传达的位置特征,例如地址列表,其在网络406上向连接到网络406的其它应用408广播。
发现框架进一步帮助接收事件,如图4的第九线程426中所示。接收事件类似于以上针对第七线程422所描述的对控制消息的处置。在第九线程426中,当用于应用402的代理代码在设计时被创建之时,即为所有事件生成方法。应用402由此可将其自己的代理类基于所生成的代理类并选取其想要超驰哪些方法。发现对象404随后将通过网络406接收到的来自其它应用408的传入事件消息映射到这些方法,其在应用402中被调用。
当应用被停止时,应用的类被销毁。应用402的析构函数还导致基于DISCOVERABLECLASS的发现对象404的析构。在最后的第十线程428中,发现对象404的析构函数生成因发现协议而异的指示可发现应用402正离开网络406并且不再可用的宣告。按照该发现框架,在收到该离开消息之际,其它应用408中的发现对象可更新相关的表或其它存储器构造以反映应用402不可用,从而防止再有查询或消息被发送给应用402。
图5的用于实现本发明的示例性硬件和操作环境包括以计算机500形式的通用计算设备,其包括处理单元502、系统存储器504、以及起效地将包括系统存储器504在内的各种系统组件耦合到处理单元502的系统总线508。可仅有一个或可有一个以上处理单元502,使得计算机500的处理器包括单个中央处理器(CPU),或多个处理单元,后者通常称为并行处理环境。计算机500可以是常规计算机、分布式计算机、或任何其它类型的计算机,但本发明并不被如此限定。
系统总线518可以是若干类型的总线结构中的任何类型,包括存储器总线或存储器控制器、外围总线、交换结构、点对点连接、和使用各种总线体系结构中的任何体系结构的局部总线。系统存储器504也可简单地被称为存储器,并且包括只读存储器(ROM)506和随机存取存储器(RAM)505。包含诸如在启动期间帮助在计算机500内各元件之间传递信息的基本例程的基本输入/输出系统(BIOS)508存储在ROM 506中。计算机500还包括用于对硬盘(未示出)进行读写的硬盘驱动器530、用于对可移动磁盘536进行读写的磁盘驱动器532、以及用于对诸如CD ROM或其它光介质等可移动光盘538进行读写的光盘驱动器534。
硬盘驱动器530、磁盘驱动器532、和光盘驱动器534分别由硬盘驱动器接口520、磁盘驱动器接口522、和光盘驱动器接口524连接到系统总线518。各驱动器及其相关联的计算机可读介质为计算机500提供对计算机可读指令、数据结构、程序模块和其它数据的非易失存储。本领域的技术人员应领会,在示例操作环境中可使用能够储存可由计算机访问的数据的任何类型的计算机可读介质,如磁带盒、闪存卡、数字视频盘、RAM、和ROM。
可在硬盘530、磁盘532、光盘534、ROM 506、或RAM 505上存储许多程序模块,包括操作系统510、一个或多个应用程序512、其它程序模块514和程序数据516。用户可通过诸如键盘540和定点设备542例如鼠标等输入设备向个人计算机500中输入命令和信息。其它输入设备(未示出)可包括例如话筒、操纵杆、游戏垫、输入板、触摸屏设备、圆盘式卫星天线、扫描仪、传真机和摄影机。这些和其它输入设备通常通过耦合到系统总线518的串行端口接口526连接到处理单元502,但也可由诸如并行端口、游戏端口、或通用串行总线(USB)等其它接口来连接。
监视器544或其它类型的显示设备也经由诸如视频适配器546等接口连接至系统总线518。除监视器544之外,计算机通常还包括诸如打印机588和扬声器(未示出)等其它外围输出设备。这些和其它输出设备通常通过耦合到系统总线518的串行端口接口526连接到处理单元502,但也可由诸如并行端口、游戏端口、或通用串行总线(USB)等其它接口来连接。
计算机500可使用至诸如远程计算机554等一个或多个远程计算机的逻辑连接在组网环境中操作。这些逻辑连接可由耦合到或整合到计算机500的通信设备来实现;但本发明并不被限定于特定类型的通信设备。远程计算机554可以是另一台计算机、服务器、路由器、网络个人计算机、客户机、对等设备、或其它公网节点,并且一般包括以上关于计算机500所描述的元件中的许多或全部,虽然在图5中仅示出存储器存储设备556。图5中所描绘的逻辑连接包括局域网(LAN)550和广域网(WAN)552。这样的组网环境常见于办公室网络、企业范围的计算机网络、内联网和因特网,即形形色色的网络。
当在LAN 550环境中使用时,计算机500通过网络接口或为一种类型的通信设备的适配器528连接到本地网络550。当在WAN 552环境中使用时,计算机500通常包括调制解调器548、网络适配器、或任何其它类型的用于在广域网552上建立通信的通信设备。可为内置或外置的调制解调器548经由串行端口接口526连接到系统总线518。在组网环境中,关于个人计算机500所描绘的程序模块或其部分可存储在远程存储器存储设备中。可以领会,所示的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它手段和通信设备。
在示例性实现中,DISCOVERABLECLASS可被纳入作为操作系统510、应用程序512、或其它程序模块514的一部分。状态描述文件、对象数据值、以及其它数据可作为程序数据516被存储。
本文所描述的技术可在一个或多个系统中被实现为逻辑操作和/或模块。逻辑操作可被实现为在一个或多个计算机系统中执行的一序列处理器实现的步骤以及实现为在一个或多个计算机系统内的互连的机器或电路模块。同样地,对各种组件模块的描述可能是在由这些模块执行或实现的操作的意义上提供的。所得的实现是取决于实现所描述的技术的底层系统的性能需求来作出的选择的问题。相应地,构成本文所描述的技术的实施例的逻辑操作被不一地称为操作、步骤、对象、或模块。此外应了解,这些逻辑操作可以按任何次序执行,除非权利要求中显性地声明并非如此或者权利要求的语言固有地令某具体次序成为必然。
以上说明、示例和数据提供了对本发明的各示例性实施例的结构和使用的完整描述。虽然以上是以一定程度的具体性或参考一个或多个的个体实施例来描述了本发明的各种实施例,但是本领域的技术人员将能够对所公开的实施例作出众多变更而不会脱离本发明的精神或范围。具体而言,应了解所描述的技术可独立于个人计算机来采用。因此其它实施例也是构想了的。其目的是以上描述中所包含的和附图中所示出的所有内容应当解释为仅为例示说明特定实施例而非限定。可对细节或结构作出改变而不会脱离如在所附各权利要求中所定义的本发明的基本要素。