Exemple #1
0
        // The Application_Start and Application_End methods are special methods that do not represent HttpApplication events.
        // ASP.NET calls them once for the lifetime of the application domain, not for each HttpApplication instance.
        // see "ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0" https://msdn.microsoft.com/en-us/library/ms178473.aspx
        // The Global.asax file is used in Integrated mode in IIS 7.0 much as it is used in ASP.NET in IIS 6.0.
        protected void Application_Start()
        {
            Trace.TraceInformation("Global.asax: starting the http application domain (Application_Start).");

            // The System.Diagnostics.Trace object gets listeners from Web.config/configuration/system.diagnostics/trace/listeners section.
            // The below code copies Trace listeners to all AutoRegistratingTraceSource trace sources.
            foreach (TraceListener item in Trace.Listeners)
            {
                if (!(item is DefaultTraceListener)) // The default trace listener is always in any TraceSource.Listeners collection.
                {
                    Microsoft.Research.Science.FetchClimate2.AutoRegistratingTraceSource.RegisterTraceListener(item);
                    Trace.TraceInformation("TraceListener \"{0}\" registered for accepting data from all AutoRegistratingTraceSources", item);
                }
            }

            // Initializing Scientific DataSet registration
            if (!DataSetFactory.ContainsProvider("memory"))
            {
                DataSetFactory.Register(typeof(MemoryDataSet));
            }
            if (!DataSetFactory.ContainsProvider("ab"))
            {
                DataSetFactory.Register(typeof(AzureBlobDataSet));
            }
            Trace.TraceInformation("Scientific DataSet providers: " + string.Join(" ", DataSetFactory.GetRegisteredProviders()));

            // Initialize JobsManager if necessary
            bool firstInstance = RoleEnvironment.CurrentRoleInstance.Id == RoleEnvironment.CurrentRoleInstance.Role.Instances[0].Id;

            // The first Frontend role instance initializes the database if necessary.
            Microsoft.Research.Science.FetchClimate2.JobManager.InitializeJobTable(FrontendSettings.Current.JobsDatabaseConnectionString, firstInstance);

            // Initialize ASP.NET WebAPI
            // enabled by Microsoft.AspNet.WebApi.Tracing package
            if (FrontendSettings.Current.EnableAspnetDiagnosticTrace)
            {
                var tw = new System.Web.Http.Tracing.SystemDiagnosticsTraceWriter();
                tw.MinimumLevel = System.Web.Http.Tracing.TraceLevel.Debug;
                tw.IsVerbose    = true;
                GlobalConfiguration.Configuration.Services.Replace(typeof(System.Web.Http.Tracing.ITraceWriter), tw);
            }
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);

            // enable CORS
            GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsMessageHandler());

            // configure formatters
            var formatters = GlobalConfiguration.Configuration.Formatters;

            //formatters.Remove(formatters.XmlFormatter);

            formatters.Add(new PlainTextFormatter());

            var jsonFormatter = GlobalConfiguration.Configuration.Formatters.OfType <JsonMediaTypeFormatter>().FirstOrDefault();

            if (jsonFormatter == null)
            {
                string msg = "No json media formatter is available due to some internal error";
                Trace.TraceError(msg);
                throw new Exception(msg);
            }
            jsonFormatter.SerializerSettings.Converters.Add(new JsonCompliantNumberConverter());
        }