注册托管设备意味着向设备主机提供设备说明及其设备控制对象。 然后,设备主机构造完整的 UPnP 设备说明,发布它,并使用 UPnP 发现协议在网络上宣布设备。 发布设备后,它可供控制点使用。
设备注册方式有两种:
- 应用程序创建设备控制对象的实例,并将指向它的指针传递给设备主机。
- 应用程序将已注册设备控件对象的 ProgID 传递给设备主机。 设备主机在收到设备的第一个请求时实例化该设备。
无论使用哪种方法,设备主机都会在注册设备后立即发布并通知设备。 这两种方法之间的差异与加载设备代码时有关。 当应用程序传入指向设备控制对象的指针时,设备代码会在注册时加载并运行。 当应用程序传递 ProgID 时,仅当调用操作、查询属性或到达事件订阅请求时,才会加载设备代码。 第二种方法略有效率。 但是,它不适用于必须在任何控件或事件订阅请求到达之前运行的设备,因为使用此方法时,设备控件对象仅在需要时才创建。 第二种方法在收到设备类型的第一个请求时,也会造成性能问题。
如果要确保在计算机启动时,网络上的设备主机自动宣布设备,请调用 IUPnPRegistrar::RegisterDevice。 RegisterDevice 确保仅在收到控件或事件订阅请求时加载设备代码。
如果设备是暂时性设备或桥接设备,请调用 IUPnPRegistrar::RegisterRunningDevice,计算机重启时设备不会自动重新播发。
发现公告生存期
注册到设备主机的每个设备都与一个生存期相关联,该生存期由设备在注册时指定。 设备的生存期是设备的发现通知有效的时间段。 生存期作为初始发现公告中的标头传递到控制点。 设备主机在到期前自动刷新公告。 发现公告生存期的值应为 15 分钟或更长, (默认值为 30 分钟) 。
注册时创建的设备标识符
创建设备说明模板时,设备开发人员必须提供服务说明的资源路径和关联的图标。 资源路径由设备应用程序确定。
由于同一设备可以在同一台计算机上多次注册,因此设备说明模板中指定的 UDN 不足以唯一标识设备。 因此,注册设备时,设备主机会创建设备标识符。 此设备标识符与设备说明模板中的 UDN 关联,可用于唯一标识设备。
在暂时注销设备,然后重新注册设备时,也会使用此标识符。 暂时注销设备时,设备主机不会删除 UDN。 不删除 UDN 的原因包括:
- 正在升级设备。
- 你正在更改设备的属性。
- 服务暂时不可用。
- 你正在向设备添加新服务。
- 你正在更新 DLL。
- 设备处于备用模式。
有关注册的详细信息,请参阅以下部分: