public override async Task ExecuteResultAsync()

in aspnet/Microsoft.Samples.XMLA.HTTP/Microsoft.Samples.XMLA.HTTP.Proxy/QueryResult.cs [35:89]


        public override async Task ExecuteResultAsync(ActionContext context)
        {

            context.HttpContext.Response.ContentType = "application/json";
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
            if (gzip)
            {
                context.HttpContext.Response.Headers.Add("Content-Encoding", "gzip");
            }
            var streaming = true;

            await context.HttpContext.Response.StartAsync();

            var responseStream = context.HttpContext.Response.Body;
            System.IO.Stream encodingStream = responseStream;
            if (gzip)
            {
                encodingStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Compress, false);
            }

            try
            {
                if (streaming)
                {
                    await WriteResultsToStream(queryResults, encodingStream, context.HttpContext.RequestAborted, log);
                }
                else
                {
                    var ms = new MemoryStream();
                    await WriteResultsToStream(queryResults, ms, context.HttpContext.RequestAborted, log);
                    ms.Position = 0;
                    var buf = new byte[256];
                    ms.Read(buf, 0, buf.Length);
                    var str = System.Text.Encoding.UTF8.GetString(buf);
                    log.LogInformation($"buffered query results starting {str}");
                    ms.Position = 0;


                    await ms.CopyToAsync(encodingStream);
                }

                pool.ReturnConnection(con);
                await encodingStream.FlushAsync();
                await responseStream.FlushAsync();
                await context.HttpContext.Response.CompleteAsync();

            }
            catch (Exception ex)
            {
                log.LogError(ex, "Error writing results");
                con.Connection.Dispose(); //do not return to pool
                throw;  //too late to send error to client  
            }

        }