/// <summary> /// Test client /// </summary> private static async Task TestOpcUaServerClientAsync(EndpointModel endpoint) { using (var logger = StackLogger.Create(ConsoleLogger.Create())) using (var client = new ClientServices(logger.Logger, new TestClientServicesConfig())) using (var server = new ServerWrapper(endpoint, logger)) { await client.ExecuteServiceAsync(endpoint, null, session => { Console.WriteLine("Browse the OPC UA server namespace."); var w = Stopwatch.StartNew(); var stack = new Stack <Tuple <string, ReferenceDescription> >(); session.Browse(null, null, ObjectIds.RootFolder, 0u, Opc.Ua.BrowseDirection.Forward, ReferenceTypeIds.HierarchicalReferences, true, 0, out var continuationPoint, out var references); Console.WriteLine(" DisplayName, BrowseName, NodeClass"); references.Reverse(); foreach (var rd in references) { stack.Push(Tuple.Create("", rd)); } while (stack.Count > 0) { var browsed = stack.Pop(); session.Browse(null, null, ExpandedNodeId.ToNodeId(browsed.Item2.NodeId, session.NamespaceUris), 0u, Opc.Ua.BrowseDirection.Forward, ReferenceTypeIds.HierarchicalReferences, true, 0, out continuationPoint, out references); references.Reverse(); foreach (var rd in references) { stack.Push(Tuple.Create(browsed.Item1 + " ", rd)); } Console.WriteLine($"{browsed.Item1}{(references.Count == 0 ? "-" : "+")} " + $"{browsed.Item2.DisplayName}, {browsed.Item2.BrowseName}, {browsed.Item2.NodeClass}"); } Console.WriteLine($" .... took {w.ElapsedMilliseconds} ms..."); return(Task.FromResult(true)); });