/// <inheritdoc/>
        public IServiceResponse EndSendRequest(IAsyncResult result)
        {
            HttpsAsyncResult result2 = result as HttpsAsyncResult;

            if (result2 == null)
            {
                throw new ArgumentException("Invalid result object passed.", nameof(result));
            }

            try
            {
                result2.WaitForComplete();
                if (result2.Response != null)
                {
                    Stream responseContent = result2.Response.Content.ReadAsStreamAsync().Result;
                    return(BinaryDecoder.DecodeMessage(responseContent, null, m_quotas.MessageContext) as IServiceResponse);
                }
            }
            catch (Exception ex)
            {
                Utils.Trace("Exception reading HTTPS response: " + ex.Message);
                result2.Exception = ex;
            }
            return(result2 as IServiceResponse);
        }
        /// <inheritdoc/>
        public IAsyncResult BeginSendRequest(IServiceRequest request, AsyncCallback callback, object callbackData)
        {
            HttpResponseMessage response = null;

            try
            {
                ByteArrayContent content = new ByteArrayContent(BinaryEncoder.EncodeMessage(request, m_quotas.MessageContext));
                content.Headers.ContentType = m_mediaTypeHeaderValue;

                var result = new HttpsAsyncResult(callback, callbackData, m_operationTimeout, request, null);
                Task.Run(async() => {
                    try
                    {
                        var ct   = new CancellationTokenSource(m_operationTimeout).Token;
                        response = await m_client.PostAsync(m_url, content, ct);
                        response.EnsureSuccessStatusCode();
                    }
                    catch (Exception ex)
                    {
                        Utils.Trace("Exception sending HTTPS request: " + ex.Message);
                        result.Exception = ex;
                        response         = null;
                    }
                    result.Response = response;
                    result.OperationCompleted();
                });

                return(result);
            }
            catch (Exception ex)
            {
                Utils.Trace("Exception sending HTTPS request: " + ex.Message);
                HttpsAsyncResult result = new HttpsAsyncResult(callback, callbackData, m_operationTimeout, request, response);
                result.Exception = ex;
                result.OperationCompleted();
                return(result);
            }
        }