跳到主要内容

ReadEvents

如果服务端记录事件历史 (HistoryRead Events), 客户端可以按时间区间拉历史事件.

配套

签名

public IReadOnlyList<EventFieldList> History.ReadEvents(
string eventNotifierNodeId, // 通常 i=2253 Server
DateTime startTime,
DateTime endTime,
uint maxValues = 0,
EventFilter filter = null);

EventFieldList

服务端返回的每条事件是一组字段值, 字段名由 EventFilter 决定. 如果不传 filter, SDK 默认拉常用字段 (Severity / Message / SourceName / Time / EventType).


用法

var events = ua.History.ReadEvents("i=2253",
startTime: now.AddDays(-1),
endTime: now);

foreach (var e in events)
{
Console.WriteLine($"[{e.Severity}] {e.SourceName}: {e.Message} @ {e.Time}");
}

自定义 EventFilter

如果想过滤 EventType / Severity, 构造 EventFilter (后续 SDK 版本将提供高级 builder API).

var filter = new EventFilter()
.SelectFields(new[] { "Severity", "Message", "SourceName", "Time" })
.WhereSeverityAtLeast(500);

var events = ua.History.ReadEvents("i=2253", from, to, filter: filter);

服务端要求

  • 必须支持 HistoryRead Events (服务端 ServerCapabilities 标志位)
  • 事件源节点必须有 EventNotifier Attribute (12) bit 1 (HistoryRead) 置位

与实时事件订阅的关系

API拿什么
SubscribeEvents(...)实时事件 (订阅期间发生的)
History.ReadEvents(...)历史事件 (服务端归档的)

通常组合用: 启动时 ReadEvents 拉过去 24 小时, 然后 SubscribeEvents 接管实时.

下一步