private static void BrowseFromNode(
                EasyDAClient client,
                ServerDescriptor serverDescriptor,
                DANodeDescriptor parentNodeDescriptor)
            {
                Debug.Assert(client != null);
                Debug.Assert(serverDescriptor != null);
                Debug.Assert(parentNodeDescriptor != null);

                Boolean append = false;

                if (parentNodeDescriptor.ToString() == "")
                {
                    append = false;
                }
                else
                {
                    append = true;
                }


                // Obtain all node elements under parentNodeDescriptor
                var browseParameters = new DABrowseParameters();    // no filtering whatsoever
                DANodeElementCollection nodeElementCollection =
                    client.BrowseNodes(serverDescriptor, parentNodeDescriptor, browseParameters);

                // Remark: that BrowseNodes(...) may also throw OpcException; a production code should contain handling for
                // it, here omitted for brevity.

                foreach (DANodeElement nodeElement in nodeElementCollection)
                {
                    Debug.Assert(nodeElement != null);

                    Console.WriteLine(nodeElement);
                    using (StreamWriter opcfile = new System.IO.StreamWriter(@"C:\Users\kiekensk\source\repos\ConsoleAppOPCClient\ConsoleAppOPCClient\dump\Cttmt2008 OPC dump.txt", append))
                    {
                        opcfile.WriteLine(nodeElement);
                    }


                    // If the node is a branch, browse recursively into it.
                    if (nodeElement.IsBranch)
                    {
                        _branchCount++;
                        BrowseFromNode(client, serverDescriptor, nodeElement);
                    }
                    else
                    {
                        _leafCount++;
                    }
                }
            }