Esempio n. 1
0
        async Task InvokeWithErrorConneg(ICommunicationContext env)
        {
            var exceptionHappened = false;

            try
            {
                await _responsePipeline.Invoke(env);
            }
            catch (Exception e)
            {
                env.ServerErrors.Add(new Error {
                    Exception = e
                });
                exceptionHappened = true;
            }
            log.WriteInfo($"Exception: {exceptionHappened}, Errors: {env.ServerErrors.Count()}, State: {env.PipelineData.PipelineStage.CurrentState}");
            if (exceptionHappened)
            {
                env.SetOperationResultToServerErrors();
            }
            if (exceptionHappened ||
                env.PipelineData.PipelineStage.CurrentState == PipelineContinuation.RenderNow)
            {
                env.PipelineData.PipelineStage.CurrentState = PipelineContinuation.Continue;
                env.PipelineData.ResponseCodec = null;

                try
                {
                    log.WriteInfo($"Trying to re-render");

                    await _responsePipeline.Invoke(env);

                    log.WriteInfo($"Errors: {env.ServerErrors.Count()}, State: {env.PipelineData.PipelineStage.CurrentState}");

                    if (env.PipelineData.PipelineStage.CurrentState == PipelineContinuation.RenderNow)
                    {
                        throw new PipelineAbortedException(env.ServerErrors);
                    }
                }
                catch (Exception e)
                {
                    env.ServerErrors.Add(new Error {
                        Exception = e
                    });

#pragma warning disable 618
                    // set for compatibility
                    env.PipelineData.PipelineStage.CurrentState = PipelineContinuation.Abort;
#pragma warning restore 618

                    throw new PipelineAbortedException(env.ServerErrors);
                }
            }
        }
Esempio n. 2
0
        public static void Abort(this ICommunicationContext context, Exception e = null)
        {
#pragma warning disable 618
            context.PipelineData.PipelineStage.CurrentState = PipelineContinuation.Abort;
#pragma warning restore 618
            if (e != null)
            {
                context.ServerErrors.Add(new Error {
                    Exception = e
                });
            }

            context.SetOperationResultToServerErrors();
            context.PipelineData.ResponseCodec    = null;
            context.Response.StatusCode           = 500;
            context.Response.Entity.Instance      = context.ServerErrors.ToList();
            context.Response.Entity.Codec         = null;
            context.Response.Entity.ContentLength = null;
        }
Esempio n. 3
0
        async Task <bool> ShouldRetryRendering(ICommunicationContext env)
        {
            try
            {
                await _responsePipeline.Invoke(env);

                if (env.PipelineData.PipelineStage.CurrentState != PipelineContinuation.RenderNow)
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
                env.ServerErrors.Add(new Error {
                    Exception = e
                });
                env.SetOperationResultToServerErrors();
            }

            return(true);
        }