private StorageMessageUnion ReadReply(StorageMessageType responses)
        {
            var iterator = MessageStreamIterator <StorageMessageUnion> .FromStreamProvider(() => new UndisposableStream(stream));

            var union = iterator.First();

            if (union.Type == StorageMessageType.TopologyChangedError)
            {
                throw new TopologyVersionDoesNotMatchException();
            }
            if (union.Type == StorageMessageType.SeeOtherError)
            {
                throw new SeeOtherException
                      {
                          Endpoint = union.SeeOtherError.Other.GetNodeEndpoint()
                      };
            }
            if (union.Type == StorageMessageType.StorageErrorResult)
            {
                throw new RemoteNodeException(union.Exception.Message);
            }
            if (union.Type != responses)
            {
                throw new UnexpectedReplyException("Got reply " + union.Type + " but expected " + responses);
            }

            return(union);
        }
        private StorageMessageUnion ReadReply(StorageMessageType responses)
        {
            var iterator = MessageStreamIterator<StorageMessageUnion>.FromStreamProvider(() => new UndisposableStream(stream));
            var union = iterator.First();

            if(union.Type==StorageMessageType.TopologyChangedError)
                throw new TopologyVersionDoesNotMatchException();
            if(union.Type==StorageMessageType.SeeOtherError)
            {
                throw new SeeOtherException
                {
                    Endpoint = union.SeeOtherError.Other.GetNodeEndpoint()
                };
            }
            if (union.Type == StorageMessageType.StorageErrorResult)
                throw new RemoteNodeException(union.Exception.Message);
            if (union.Type != responses)
                throw new UnexpectedReplyException("Got reply " + union.Type + " but expected " + responses);

            return union;
        }