/// <summary>
        /// Warning: There's one unnecessary copying of the data. You should fix it before sending large data too often.
        /// </summary>
        public void SendMessage <TRequest>(string handlerName, TRequest messageBody)
            where TRequest : Table
        {
            byte[] buffer = BufferConverter.Convert(messageBody.ByteBuffer);

            SendMessage(handlerName, buffer, buffer.Length);
        }
        /// <summary>
        /// Warning: There's one unnecessary copying of the data. You should fix it before sending large data too often.
        /// </summary>
        public TResponse SendQuery <TRequest, TResponse>(string handlerName, TRequest messageBody)
            where TRequest : Table
            where TResponse : Table
        {
            var receiveStream = new MemoryStream(InitialBufferSize);

            ByteBuffer byteBuffer = messageBody.ByteBuffer;

            byte[] buffer = BufferConverter.Convert(byteBuffer);

            SendQuery(handlerName, buffer, receiveStream, buffer.Length);

            receiveStream.Position = 0;

            return(m_responseParser.Parse <TResponse>(receiveStream.GetBuffer()));
        }