public async Task BrowseObjects() { var channel = new ClientSessionChannel( localDescription, certificateStore, new AnonymousIdentity(), EndpointUrl, SecurityPolicyUris.None, loggerFactory: loggerFactory); await channel.OpenAsync(); var rds = new List <ReferenceDescription>(); var browseRequest = new BrowseRequest { NodesToBrowse = new[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(ExpandedNodeId.Parse(ObjectIds.ObjectsFolder), channel.NamespaceUris), ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), ResultMask = (uint)BrowseResultMask.TargetInfo, NodeClassMask = (uint)NodeClass.Unspecified, BrowseDirection = BrowseDirection.Forward, IncludeSubtypes = true } }, RequestedMaxReferencesPerNode = 1000 }; var browseResponse = await channel.BrowseAsync(browseRequest).ConfigureAwait(false); rds.AddRange(browseResponse.Results.Where(result => result.References != null).SelectMany(result => result.References)); var continuationPoints = browseResponse.Results.Select(br => br.ContinuationPoint).Where(cp => cp != null).ToArray(); while (continuationPoints.Length > 0) { var browseNextRequest = new BrowseNextRequest { ContinuationPoints = continuationPoints, ReleaseContinuationPoints = false }; var browseNextResponse = await channel.BrowseNextAsync(browseNextRequest); rds.AddRange(browseNextResponse.Results.Where(result => result.References != null).SelectMany(result => result.References)); continuationPoints = browseNextResponse.Results.Select(br => br.ContinuationPoint).Where(cp => cp != null).ToArray(); } rds .Should().NotBeEmpty(); logger.LogInformation("+ Objects, 0:Objects, Object"); foreach (var rd in rds) { logger.LogInformation(" + {0}, {1}, {2}", rd.DisplayName, rd.BrowseName, rd.NodeClass); } logger.LogInformation($"Closing session '{channel.SessionId}'."); await channel.CloseAsync(); }