生成推式请求的前提条件是,统一数据库中必须包含服务器启动的同步所需的推式请求列,并且必须能够通过单个数据库查询获得这些值。在 request_cursor 事件中提供用于选择推式请求列的数据库查询时自动生成推式请求。有关推式请求要求的详细信息,请参见推式请求要求。
统一数据库中包含名为 PushRequest 的表,该表包含轻量级轮询器的推式请求。远程设备在 MobiLink 服务器上标识为 unique_device_ID。服务器使用以下 SQL 脚本请求同步:
INSERT INTO PushRequest (poll_key, subject, content) VALUES ('unique_device_ID', 'synchronize', 'ASAP'); |
使用此脚本插入值不足以生成推式请求。必须在 request_cursor 事件中使用数据库查询选择值。为生成推式请求,服务器使用以下 request_cursor 事件脚本:
SELECT poll_key, subject, content FROM PushRequest; |
unique_device_ID 设备在服务器中轮询推式通知时生成推式请求。推式通知主题是 synchronize,内容是 ASAP。
下表列出了每个列的推式请求限制:
列 |
类型 |
限制 |
---|---|---|
请求 ID |
INTEGER |
此值必须为唯一主键。 |
轮询键 |
VARCHAR |
仅在使用轻量级轮询器时需要。 对轮询键没有限制。 |
网关 |
VARCHAR |
仅在使用网关时需要。 此值必须设置为已启用网关的名称。可以指定自己的自定义网关名称,也可以选择以下预配置的网关名称之一:
请参见将网关用作轻量级轮询器的替代方法。 |
主题 |
VARCHAR |
设置此值时避免使用非字母数字字符。大括号、尖括号、双引号、圆括号、单引号和方括号专供内部使用,不能在主题列中使用。 |
内容 |
VARCHAR |
对消息内容没有限制。 |
地址 |
VARCHAR |
仅在使用网关时需要。 对于 UDP 网关,此值应为 IP 地址或主机名。支持以下格式的端口号后缀:
对于 SMTP 网关,此值应为电子邮件地址。 对于 SYNC 网关和设备跟踪网关,此值应是使用监听器 -t+ 选项定义的接收者名称。请参见-t 选项。 |
重发间隔 |
VARCHAR |
缺省情况下,此值按分钟计。可以指定 S、M 和 H,分别代表以秒、分钟和小时为单位。还可以将各单位组合使用;例如 如果此值为空值或未指定,则缺省情况下,仅发送一次,不重发。 |
生存期 |
VARCHAR |
缺省情况下,此值按分钟计。可以指定 S、M 和 H,分别代表以秒、分钟和小时为单位。还可以将各单位组合使用;例如, 如果此值为空值或未指定,则缺省情况下,仅发送一次,不重发。 |
通告程序通过频繁触发 request_cursor 事件检测推式请求。缺省情况下,不为此事件指定脚本;您必须提供 request_cursor 事件脚本,以使通告程序能够检测推式请求。在典型应用程序中,request_cursor 事件脚本是 SELECT 语句。请参见request_cursor 事件。
以下示例使用 ml_add_property 系统过程为名为 Simple 的自定义通告程序创建 request_cursor 事件脚本。SELECT 语句告诉通告程序从名为 PushRequest 的表检测推式请求。
CALL ml_add_property('SIS', 'Notifier(Simple)', 'request_cursor', 'SELECT poll_key, subject, content FROM PushRequest' ); |
列的选择顺序必须与推式请求中列的指定顺序相同。请参见推式请求要求。
有关设置通告程序事件的详细信息,请参见用于服务器启动的同步的 MobiLink 服务器设置。
如果被通知设备的相关信息在被发送并按照业务规则被满足之后从未更新,则通告程序会重发推式通知。满足推式请求后,您需要阻止通告程序检测旧的推式请求。如果发送推式通知是为了进行同步,可以使用同步脚本删除这些推式请求。
可以使用 request_delete 事件按推式请求的请求 ID 删除推式请求,但推式请求中必须包含请求 ID 列,且必须启用传送确认。
传送确认在 Palm 设备上不可用;但可以通过实施自己的传送确认机制删除推式请求。例如,使用自己的同步逻辑,可以在发生特定同步时删除推式请求。有关在 Windows 设备上禁用传送确认的详细信息,请参见用于 Windows 的监听器关键字。
请参见:
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |