BrowseNext
当 Browse / BrowseWithPaging 返回的子节点超过服务端单页限制时, 服务端会返回非空的 ContinuationPoint (续翻凭证). 用 BrowseNext 继续拿下一页.
前置阅读
- 想拿到 ContinuationPoint 必须用 BrowseWithPaging, 普通 Browse 会丢弃 CP.
签名
public BrowsePage BrowseNext(byte[] continuationPoint, bool release = false);
| 参数 | 说明 |
|---|---|
continuationPoint | 上一次 Browse / BrowseNext 返回的续翻凭证 |
release | true = 放弃续翻, 服务端释放资源 (不返回 references) |
BrowsePage 字段
public sealed class BrowsePage
{
public IReadOnlyList<OpcUaReference> References { get; init; }
public byte[] ContinuationPoint { get; init; } // null 表示无更多页
}
完整翻页例子
var page = ua.BrowseWithPaging("ns=2;s=BigFolder");
var allRefs = new List<OpcUaReference>(page.References);
while (page.ContinuationPoint != null)
{
page = ua.BrowseNext(page.ContinuationPoint);
allRefs.AddRange(page.References);
}
Console.WriteLine($"Total {allRefs.Count} children");
主动释放 (节省服务端资源)
服务端为每个 ContinuationPoint 维护状态, 占用资源. 如果中途不想继续翻, 调 release=true 显式释放:
ua.BrowseNext(page.ContinuationPoint, release: true);
否则服务端会在超时后 (典型 5 分钟) 自动 GC.
注意
ContinuationPoint是不透明字节数组, 不要修改 / 解析- 同一个
ContinuationPoint只能用一次 - 服务端
ContinuationPoint数量上限 (通常每 Session ~10-100), 超过后旧 CP 会被踢