Пример #1
0
        public Task HandleChangesRequest(IHttpContext context, Action onDisconnect)
        {
            var sw = Stopwatch.StartNew();

            try
            {
                if (SetupRequestToProperDatabase(context) == false)
                {
                    FinalizeRequestSafe(context);
                    onDisconnect();
                    return(new CompletedTask());
                }

                if (!SetThreadLocalState(context))
                {
                    FinalizeRequestSafe(context);
                    onDisconnect();
                    return(new CompletedTask());
                }
                var eventsTransport = new EventsTransport(context);
                eventsTransport.Disconnected += onDisconnect;
                var handleChangesRequest = eventsTransport.ProcessAsync();
                CurrentDatabase.TransportState.Register(eventsTransport);
                return(handleChangesRequest);
            }
            catch (Exception e)
            {
                try
                {
                    HandleException(context, e);
                    if (ShouldLogException(e))
                    {
                        logger.WarnException("Error on request", e);
                    }
                }
                finally
                {
                    FinalizeRequestSafe(context);
                }
                onDisconnect();
                return(new CompletedTask());
            }
            finally
            {
                try
                {
                    LogHttpRequestStats(new LogHttpRequestStatsParams(
                                            sw,
                                            context.Request.Headers,
                                            context.Request.HttpMethod,
                                            context.Response.StatusCode,
                                            context.Request.Url.PathAndQuery));
                }
                catch (Exception e)
                {
                    logger.WarnException("Could not gather information to log request stats", e);
                }
                ResetThreadLocalState();
            }
        }