Exemple #1
0
        public void ShouldEnable_ReturnsExpectedValue()
        {
            IOptions <HttpOptions> optionsWrapper = null;
            var scriptHostManagerMock             = new Mock <IScriptHostManager>(MockBehavior.Strict);
            var hostServiceProviderMock           = scriptHostManagerMock.As <IServiceProvider>();

            hostServiceProviderMock.Setup(p => p.GetService(typeof(IOptions <HttpOptions>))).Returns(() => optionsWrapper);
            var rootServiceProvider = new Mock <IServiceProvider>(MockBehavior.Strict);

            rootServiceProvider.Setup(p => p.GetService(typeof(IScriptHostManager))).Returns(scriptHostManagerMock.Object);

            Assert.False(HttpThrottleMiddleware.ShouldEnable(null));
            Assert.False(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object));

            var httpOptions = new HttpOptions();

            optionsWrapper = new OptionsWrapper <HttpOptions>(httpOptions);
            Assert.False(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object));

            httpOptions.MaxConcurrentRequests = 5;
            Assert.True(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object));

            httpOptions.MaxConcurrentRequests   = -1;
            httpOptions.DynamicThrottlesEnabled = true;
            Assert.True(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object));
        }
Exemple #2
0
        public static IApplicationBuilder UseWebJobsScriptHost(this IApplicationBuilder builder, IApplicationLifetime applicationLifetime, Action <WebJobsRouteBuilder> routes)
        {
            IEnvironment environment = builder.ApplicationServices.GetService <IEnvironment>() ?? SystemEnvironment.Instance;
            IOptionsMonitor <StandbyOptions>         standbyOptions         = builder.ApplicationServices.GetService <IOptionsMonitor <StandbyOptions> >();
            IOptionsMonitor <HttpBodyControlOptions> httpBodyControlOptions = builder.ApplicationServices.GetService <IOptionsMonitor <HttpBodyControlOptions> >();
            IServiceProvider serviceProvider = builder.ApplicationServices;

            builder.UseMiddleware <HttpRequestBodySizeMiddleware>();
            builder.UseMiddleware <SystemTraceMiddleware>();
            builder.UseMiddleware <HostnameFixupMiddleware>();
            if (environment.IsLinuxConsumption())
            {
                builder.UseMiddleware <EnvironmentReadyCheckMiddleware>();
            }

            if (standbyOptions.CurrentValue.InStandbyMode)
            {
                builder.UseMiddleware <PlaceholderSpecializationMiddleware>();
            }

            // Specialization can change the CompatMode setting, so this must run later than
            // the PlaceholderSpecializationMiddleware
            builder.UseWhen(context => httpBodyControlOptions.CurrentValue.AllowSynchronousIO || context.Request.IsAdminDownloadRequest(), config =>
            {
                config.UseMiddleware <AllowSynchronousIOMiddleware>();
            });

            // This middleware must be registered before we establish the request service provider.
            builder.UseWhen(context => !context.Request.IsAdminRequest(), config =>
            {
                config.UseMiddleware <HostAvailabilityCheckMiddleware>();
            });

            builder.UseWhen(context => HostWarmupMiddleware.IsWarmUpRequest(context.Request, standbyOptions.CurrentValue.InStandbyMode, environment), config =>
            {
                config.UseMiddleware <HostWarmupMiddleware>();
            });

            // This middleware must be registered before any other middleware depending on
            // JobHost/ScriptHost scoped services.
            builder.UseMiddleware <ScriptHostRequestServiceProviderMiddleware>();

            if (environment.IsLinuxConsumption())
            {
                builder.UseMiddleware <AppServiceHeaderFixupMiddleware>();
            }

            builder.UseMiddleware <ExceptionMiddleware>();
            builder.UseWhen(HomepageMiddleware.IsHomepageRequest, config =>
            {
                config.UseMiddleware <HomepageMiddleware>();
            });
            builder.UseWhen(context => !context.Request.IsAdminRequest() && HttpThrottleMiddleware.ShouldEnable(serviceProvider), config =>
            {
                config.UseMiddleware <HttpThrottleMiddleware>();
            });

            builder.UseMiddleware <JobHostPipelineMiddleware>();
            builder.UseMiddleware <FunctionInvocationMiddleware>();

            // Register /admin/vfs, and /admin/zip to the VirtualFileSystem middleware.
            builder.UseWhen(VirtualFileSystemMiddleware.IsVirtualFileSystemRequest, config => config.UseMiddleware <VirtualFileSystemMiddleware>());

            // MVC routes (routes defined by Controllers like HostController, FunctionsController, ... must be added before functions/proxy routes so they are matched first and can not be overridden by functions or proxy routes)
            // source here: https://github.com/aspnet/Mvc/blob/master/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs
            builder.UseMvc();

            // Ensure the HTTP binding routing is registered after all middleware
            builder.UseHttpBindingRouting(applicationLifetime, routes);

            return(builder);
        }
        public static IApplicationBuilder UseWebJobsScriptHost(this IApplicationBuilder builder, IApplicationLifetime applicationLifetime, Action <WebJobsRouteBuilder> routes)
        {
            IEnvironment environment = builder.ApplicationServices.GetService <IEnvironment>() ?? SystemEnvironment.Instance;
            IOptionsMonitor <StandbyOptions>         standbyOptions         = builder.ApplicationServices.GetService <IOptionsMonitor <StandbyOptions> >();
            IOptionsMonitor <HttpBodyControlOptions> httpBodyControlOptions = builder.ApplicationServices.GetService <IOptionsMonitor <HttpBodyControlOptions> >();
            IOptionsMonitor <HttpOptions>            httpOptions            = builder.ApplicationServices.GetService <IOptionsMonitor <HttpOptions> >();

            builder.UseMiddleware <SystemTraceMiddleware>();
            builder.UseMiddleware <HostnameFixupMiddleware>();
            if (environment.IsLinuxConsumption())
            {
                builder.UseMiddleware <EnvironmentReadyCheckMiddleware>();
            }

            if (standbyOptions.CurrentValue.InStandbyMode)
            {
                builder.UseMiddleware <PlaceholderSpecializationMiddleware>();
            }

            // Specialization can change the CompatMode setting, so this must run later than
            // the PlaceholderSpecializationMiddleware
            builder.UseWhen(context => httpBodyControlOptions.CurrentValue.AllowSynchronousIO || context.Request.IsAdminDownloadRequest(), config =>
            {
                config.UseMiddleware <AllowSynchronousIOMiddleware>();
            });

            // This middleware must be registered before we establish the request service provider.
            builder.UseWhen(context => !context.Request.IsAdminRequest(), config =>
            {
                config.UseMiddleware <HostAvailabilityCheckMiddleware>();
            });

            builder.UseWhen(context => HostWarmupMiddleware.IsWarmUpRequest(context.Request, standbyOptions.CurrentValue.InStandbyMode, environment), config =>
            {
                config.UseMiddleware <HostWarmupMiddleware>();
            });

            // This middleware must be registered before any other middleware depending on
            // JobHost/ScriptHost scoped services.
            builder.UseMiddleware <ScriptHostRequestServiceProviderMiddleware>();

            if (environment.IsLinuxConsumption())
            {
                builder.UseMiddleware <AppServiceHeaderFixupMiddleware>();
            }

            builder.UseMiddleware <ExceptionMiddleware>();
            builder.UseWhen(HomepageMiddleware.IsHomepageRequest, config =>
            {
                config.UseMiddleware <HomepageMiddleware>();
            });
            builder.UseWhen(context => HttpThrottleMiddleware.ShouldEnable(httpOptions.CurrentValue) && !context.Request.IsAdminRequest(), config =>
            {
                config.UseMiddleware <HttpThrottleMiddleware>();
            });
            builder.UseMiddleware <ResponseContextItemsCheckMiddleware>();
            builder.UseMiddleware <JobHostPipelineMiddleware>();
            builder.UseMiddleware <FunctionInvocationMiddleware>();

            // Register /admin/vfs, and /admin/zip to the VirtualFileSystem middleware.
            builder.UseWhen(VirtualFileSystemMiddleware.IsVirtualFileSystemRequest, config => config.UseMiddleware <VirtualFileSystemMiddleware>());

            // Ensure the HTTP binding routing is registered after all middleware
            builder.UseHttpBindingRouting(applicationLifetime, routes);

            builder.UseMvc();

            return(builder);
        }