private MessageTarget GetTarget(MessageTargetHeader header)
        {
            var target = new MessageTarget();
            var info   = _infoProvider[Tuple.Create(header.Type, header.Method)];

            target.Type            = info.Type;
            target.ShortTypeName   = info.ShortTypeName;
            target.Method          = info.Method;
            target.ShortMethodName = info.ShortMethodName;
            target.ArgumentTypes   = info.ArgumentTypes;
            target.Await           = header.Await;
            target.MessageKey      = header.MessageKey;
            target.StreamingCall   = info.StreamingCall;
            return(target);
        }
        private static MessageTargetHeader GetTargetKey(BinaryReader reader)
        {
            var header = new MessageTargetHeader();
            var await  = reader.ReadBoolean();

            header.Await = @await;
            if (@await)
            {
                var guidBytes = reader.ReadBytes(16);
                header.MessageKey = new Guid(guidBytes);
            }

            header.Type   = reader.ReadString();
            header.Method = reader.ReadString();
            return(header);
        }