// 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()); }