/// <summary>
        /// Builds out the nodes and descriptors on the client side. Adds to a _cachedNodes list and keeps it updated.
        /// </summary>
        /// <param name="relatedNodesResult"></param>
        /// <returns></returns>
        private List <INodeProxy> BuildNodeList(RelatedNodesSearchResult relatedNodesResult)
        {
            List <INodeProxy> nodes = new List <INodeProxy>();

            if (relatedNodesResult.Nodes.Count > 0)
            {
                foreach (SoapNode soapNode in relatedNodesResult.Nodes.Values)
                {
                    if (_cachedNodes.ContainsKey(soapNode.Id))
                    {
                        _cachedNodes.Remove(soapNode.Id);
                    }
                    NodeProxy node = new NodeProxy(soapNode);
                    _cachedNodes.Add(soapNode.Id, node);
                }

                foreach (SoapNode soapNode in relatedNodesResult.Nodes.Values)
                {
                    foreach (SoapRelationship relationship in soapNode.Relationships.Values)
                    {
                        RelationshipProxy relationshipProxy = new RelationshipProxy(relationship);

                        foreach (DescriptorProxy descriptor in relationshipProxy.Descriptors)
                        {
                            if (_cachedNodes.ContainsKey(descriptor.NodeId))
                            {
                                INodeProxy connectedNode = _cachedNodes[descriptor.NodeId];
                                descriptor.Node = connectedNode;
                                if (!connectedNode.Descriptors.Contains(descriptor))
                                {
                                    connectedNode.Descriptors.Add(descriptor);
                                }
                            }
                        }
                    }
                }

                foreach (SoapNode soapNode in relatedNodesResult.Nodes.Values)
                {
                    nodes.Add(_cachedNodes[soapNode.Id]);
                }

                foreach (INodeProxy nodeProxy in nodes)
                {
                    foreach (IDescriptorProxy descriptorProxy in nodeProxy.Descriptors)
                    {
                        CompleteRelationship(descriptorProxy.Relationship);
                    }
                }
            }

            return(nodes);
        }
        /// <summary>
        /// Builds out the nodes and descriptors on the client side. Adds to a _cachedNodes list and keeps it updated.
        /// </summary>
        /// <param name="relatedNodesResult"></param>
        /// <returns></returns>
        private List<INodeProxy> BuildNodeList(RelatedNodesSearchResult relatedNodesResult)
        {
            List<INodeProxy> nodes = new List<INodeProxy>();

            if (relatedNodesResult.Nodes.Count > 0)
            {
                foreach (SoapNode soapNode in relatedNodesResult.Nodes.Values)
                {
                    if (_cachedNodes.ContainsKey(soapNode.Id))
                    {
                        _cachedNodes.Remove(soapNode.Id);
                    }
                    NodeProxy node = new NodeProxy(soapNode);
                    _cachedNodes.Add(soapNode.Id, node);
                }

                foreach (SoapNode soapNode in relatedNodesResult.Nodes.Values)
                {
                    foreach (SoapRelationship relationship in soapNode.Relationships.Values)
                    {
                        RelationshipProxy relationshipProxy = new RelationshipProxy(relationship);

                        foreach (DescriptorProxy descriptor in relationshipProxy.Descriptors)
                        {
                            if (_cachedNodes.ContainsKey(descriptor.NodeId))
                            {
                                INodeProxy connectedNode = _cachedNodes[descriptor.NodeId];
                                descriptor.Node = connectedNode;
                                if (!connectedNode.Descriptors.Contains(descriptor))
                                {
                                    connectedNode.Descriptors.Add(descriptor);
                                }
                            }
                        }
                    }
                }

                foreach (SoapNode soapNode in relatedNodesResult.Nodes.Values)
                {
                    nodes.Add(_cachedNodes[soapNode.Id]);
                }

                foreach (INodeProxy nodeProxy in nodes)
                {
                    foreach (IDescriptorProxy descriptorProxy in nodeProxy.Descriptors)
                    {
                        CompleteRelationship(descriptorProxy.Relationship);
                    }
                }
            }

            return nodes;
        }