private static IResponseMessage GetResponseMessage(HttpResponseMessage response)
        {
            var headers = GetRpcHeaders(response.Headers);
            //var contentEncoding = response.Headers.GetValues("Transfer-Encoding").FirstOrDefault();
            string statusCode;
            var isSuccess = headers.TryGetValue(HeaderName.StatusCode, out statusCode)
                && statusCode == RpcStatusCode.Ok;

            var responseMessage = new ResponseMessage(response)
            {
                IsSuccess = isSuccess, // response.StatusCode == HttpStatusCode.OK,
                Result = response.Content.ReadAsStreamAsync().Result,
                Headers = headers,
            };
            return responseMessage;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="action"></param>
        /// <param name="content"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public virtual Task<IResponseMessage> SendAsync(string action, Stream content, IDictionary<string, string> headers)
        {
            if (SendAsyncFunc != null)
                return SendAsyncFunc(action, content, headers);

            var outputStream = new MemoryStream();
            var responseHeader = new Dictionary<string, string>();

            var request = new GenericServerContext
            {
                RequestContentLength = (int)content.Length,
                RequestContentType = headers["Content-Type"],
                RequestPath = Address + action,
                RequestStream = content,
                RequestHeader = headers,

                ResponseStream = outputStream,
                ResponseHeader = responseHeader,
            };

            return _appHost.ProcessAsync(request).ContinueWith(tsk =>
            {
                var processed = tsk.Result;
                if (!processed)
                    return null;

                string statusCode;
                var isSuccess = responseHeader.TryGetValue(HeaderName.StatusCode, out statusCode)
                    && statusCode == RpcStatusCode.Ok;

                outputStream.Position = 0;
                var response = new ResponseMessage(null)
                {
                    Headers = responseHeader,
                    IsSuccess = isSuccess,
                    Result = outputStream,
                };

                return (IResponseMessage)response;
            });
        }
        private static ResponseMessage GetResponseMessage(HttpWebResponse response)
        {
            var headers = GetRpcHeaders(response.Headers);

            string statusCode;
            var isSuccess = headers.TryGetValue(HeaderName.StatusCode, out statusCode)
                && statusCode == RpcStatusCode.Ok;

            var responseMessage = new ResponseMessage(response)
            {
                IsSuccess = isSuccess,
                Result = response.GetResponseStream(),
                Headers = headers,
            };
            return responseMessage;
        }