传统服务是早于 SLP 的开发和实现的网络服务。行式打印机守护进程 (lpsched)、NFS 文件服务和 NIS/NIS+ 名称服务等 Solaris 服务不包含用于 SLP 的内部 SA。本章介绍通知传统服务的时间和方式。
通过传统服务通知,可使 SLP UA 在网络中查找如下所示的设备和服务。可以查找不包含 SLP SA 的硬件设备和软件服务。例如,当具有 SLP UA 的应用程序需要查找不包含 SLP SA 的打印机或数据库时,可能需要使用传统通知。
可以使用以下任一方法来通知传统服务。
如果软件服务器的源代码可用,则可引入 SLP SA。用于 SLP 的 C 和 Java API 使用起来相对简单。有关 C API 的信息和有关 Java API 的文档,请参见手册页。如果服务是硬件设备,则制造商可能会有可引入 SLP 的更新 PROM。有关更多信息,请与设备制造商联系。
如果没有源代码或包含 SLP 的更新的 PROM,则可编写一个使用 SLP 客户机库通知服务的小型应用程序。此应用程序可用作小型守护进程,可在用来启动和停止服务的同一 Shell 脚本中启动或停止。
Solaris slpd 支持用代理注册文件通知的传统服务。代理注册文件是可移植格式的服务通知的列表。
在主机文件系统或可通过 HTTP 访问的任何网络目录中创建代理注册文件。
确定是否存在用于该服务的服务类型模板。
模板是对服务 URL 和服务类型的属性的说明。模板用于为特定服务类型定义通知的组成部分:
如果存在服务类型模板,请使用该模板来构造代理注册。有关服务类型模板的更多信息,请参见 RFC 2609。
如果没有该服务的服务类型模板,请选择可以准确描述该服务的属性集合。请对通知使用命名授权而非缺省设置。缺省的命名授权只允许用于已标准化的服务类型。有关命名授权的更多信息,请参见 RFC 2609。
例如,假设一个名为 BizApp 的公司有一个用于跟踪软件缺陷的本地数据库。为通知该数据库,该公司可能使用服务类型为 service:bugdb.bizapp 的 URL。命名授权将为 bizapp。
执行以下步骤,以配置 /etc/inet/slp.conf 文件(此文件位于前面步骤创建的注册文件的位置)中的 net.slp.serializedRegURL 属性。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 /etc/inet/slp.conf 文件的 net.slp.serializedRegURL 属性中指定代理注册文件的位置。
net.slp.net.slp.serializedRegURL=proxy registration file URL |
例如,如果串行化的注册文件是 /net/inet/slp.reg,则可按如下所示来配置属性:
net.slp.serializedRegURL=file:/etc/inet/slp.reg |
保存更改并关闭文件。
# svcadm enable network/slp |
服务通知由标识服务 URL、可选范围和一系列属性定义的行构成。SLP 守护进程将完全按照与 SA 客户机相同的方式来读取、注册和维护代理通知。下面是来自代理注册文件的通知的示例。
在此示例中,通知了支持 LPR 协议和 FTP 服务器的传统打印机。为了便于说明,添加了行号,但它们不是文件的构成部分。
(1) #Advertise legacy printer. (2) (3) service:lpr://bizserver/mainspool,en,65535 (4) scope=eng,corp (5) make-model=Laserwriter II (6) location-description=B16-2345 (7) color-supported=monochromatic (8) fonts-supported=Courier,Times,Helvetica 9 10 (9) (10) #Advertise FTP server (11) (12) ftp://archive/usr/src/public,en,65535,src-server (13) content=Source code for projects (14) |
对于转义非 ASCII 字符,代理注册文件与配置文件支持相同的约定。有关代理注册文件格式的更多信息,请参见 RFC 2614。
通常,修改源代码来添加 SLP 的方法,优于编写启用 SLP 的服务(该服务使用 SLP API 代表其他服务进行通知)。修改源代码的方法也优于使用代理注册的方法。修改源代码时,可以添加特定于服务的功能并密切跟踪服务的可用性。如果源代码不可用,则编写代表其他服务进行通知的启用 SLP 的帮助器服务的方法,优于使用代理注册的方法。此帮助器服务最好集成到用于控制激活和取消激活服务启动/停止过程中。当没有源代码可用并且编写单独的 SA 不可行时,代理通知通常是第三种选择。
仅当运行 slpd 以读取代理注册文件时,才能维护代理通知。代理通知与服务之间没有直接的联系。如果通知超时或 slpd 停止,代理通知将不再可用。
如果服务关闭,则必须停止 slpd。该序列化注册文件被编辑,以注释掉或删除代理通知,然后 slpd 重新启动。重新启动或重新安装服务时,必须遵循相同的过程。代理通知与服务之间缺少联系是代理通知的主要缺点。