/// <summary> /// Creates a new web.config file for the specified service instance /// </summary> /// <param name="configFilePath"></param> /// <param name="database"></param> /// <param name="servicesName"></param> /// <param name="auditSiteSubscriptionId"></param> public static void CreateCustomConfig(string configFilePath, BusinessServiceDatabase database, string servicesName, string auditSiteSubscriptionId) { Create(configFilePath); var configuration = Load(configFilePath); configuration.AddConnectionString(Constants.ServiceHostConnectionStringName, database.DatabaseConnectionString); configuration.AddUpdateProductVersion(ServiceContext.HostSettings.ProductVersion); configuration.AddAuditSiteSubscriptionId(auditSiteSubscriptionId); configuration.Save(); IISUtilities.SetServiceInstanceAuth(servicesName, true, true); }
public static void CreateServiceInstance(CreateServiceInstanceRequest request) { lock (_threadLock) { // Validate new service instance parameters var validationErrors = PreValidateCreateServiceInstance(request); if (!string.IsNullOrEmpty(validationErrors)) throw new BusinessException(validationErrors); if (!request.ValidateOnly) { // Provision the business service database var database = new BusinessServiceDatabase(request.DatabaseInstanceName, request.DatabaseName, request.AppPoolUserName, request.ServicesName, request.DatabaseBehavior, request.SampleDataScript); database.Create(); database.CreateServiceUser(request.DefaultAdminUserName, request.DefaultAdminUserPassword, 3); database.CreateServiceUser(request.DefaultPublicUserName, request.DefaultPublicUserPassword, 2); // Create services folder structure var auditSiteSubscriptionId = GetEffectiveAuditSiteSubscriptionId(request.AuditSiteSubscriptionId, request.ServicesName); var targetFolder = GetServicesInstancePhysicalPath(request.ServicesName); FileUtilties.CreateDirectory(targetFolder); FileUtilties.Copy(AdminServicesPhysicalPath, targetFolder); // Create IIS configuration IISUtilities.BuildIISEntities(request, targetFolder); // Create web.config file for service instance BusinessServiceConfiguration.CreateCustomConfig(Path.Combine(targetFolder, "Web.config"), database, request.ServicesName, auditSiteSubscriptionId); // Register new instance with auditing service AuditingServiceManager.AddAuditSiteSubscriptionId(auditSiteSubscriptionId); AuditingServiceManager.RestartAuditingService(); } } }
/// <summary> /// Loads the host settings, etc. /// </summary> private static void ConfigureServiceContext() { ServiceContext.Logger.Info("Loading Host Settings."); ServiceContext.HostSettings.ServicesName = GetServiceName(); ServiceContext.HostSettings.ApplicationPath = MapBinPath(); ServiceContext.HostSettings.IsAdminServiceHost = string.IsNullOrEmpty(ServiceContext.HostSettings.ServicesName); var config = WebConfigurationManager.OpenWebConfiguration(MapCustomWebConfigFolderVirtualPath()); ServiceContext.HostSettings.ProductVersion = config.AppSettings.Settings["ProductVersion"].Value; if (!ServiceContext.HostSettings.IsAdminServiceHost) { ServiceContext.HostSettings.ServiceHostDBConnectionString = config.ConnectionStrings.ConnectionStrings["ServiceHost"].ConnectionString; var sqlConnection = new SqlConnectionStringBuilder(ServiceContext.HostSettings.ServiceHostDBConnectionString); ServiceContext.HostSettings.ServiceHostDBName = sqlConnection.InitialCatalog; ServiceContext.HostSettings.ServiceHostDBInstanceName = sqlConnection.DataSource; ServiceContext.HostSettings.AuditSiteSubscriptionId = config.AppSettings.Settings["AuditSiteSubscriptionId"].Value; var database = new BusinessServiceDatabase(HostingEnvironment.ApplicationPhysicalPath.TrimEnd('\\'), Common.Administration.CreateDatabaseBehavior.ReuseExistingOnly, null); ServiceContext.HostSettings.PublicDBUserName = database.PublicDBUserName; ServiceContext.HostSettings.PublicDBUserPassword = database.PublicDBUserPassword; } }
public static void UpgradeServiceInstances(UpgradeServiceInstancesRequest request) { lock (_threadLock) { // Get service instances to upgrade var serviceInstances = IISUtilities.GetServiceInstances(); if (!request.UpgradeAllInstances) { request.InstanceNames = request.InstanceNames.Select(n => n.ToLowerInvariant()); serviceInstances = serviceInstances.Where(i => request.InstanceNames.Contains(i.ServicesName.ToLowerInvariant())); } // Upgrade each service instance foreach (var serviceInstance in serviceInstances) { IISUtilities.StopAppPool(serviceInstance.PhysicalPath); // Update service instance database schema var database = new BusinessServiceDatabase(serviceInstance.PhysicalPath, request.DatabaseBehavior, request.SampleDataScript); if (request.DatabaseBehavior == CreateDatabaseBehavior.DestroyExistingAndCreate) database.Create(); else database.Update(); // Update service instance files var targetFolder = GetServicesInstancePhysicalPath(serviceInstance.ServicesName); FileUtilties.Copy(AdminServicesPhysicalPath, targetFolder); // Update service instance configuration BusinessServiceConfiguration.UpdateCustomConfig(serviceInstance.PhysicalPath, serviceInstance.ServicesName); IISUtilities.StartAppPool(serviceInstance.PhysicalPath); } } }
private static string PreValidateCreateServiceInstance(CreateServiceInstanceRequest request) { var validationErrors = new StringBuilder(); string validationError = string.Empty; if (!ServiceContext.HostSettings.IsAdminServiceHost) { validationErrors.AppendLine("New service instances can only be created from the admin service instance."); } else { // Validate service database creation var database = new BusinessServiceDatabase(request.DatabaseInstanceName, request.DatabaseName, request.AppPoolUserName, request.ServicesName, request.DatabaseBehavior, request.SampleDataScript); validationError = database.PreValidateCreate(); if (!string.IsNullOrEmpty(validationError)) validationErrors.AppendLine(validationError); // Validate target folder for service files if (!request.AllowServiceInstanceOverwrite) { var targetFolder = GetServicesInstancePhysicalPath(request.ServicesName); if (Directory.Exists(targetFolder)) validationErrors.AppendLine(string.Format(CultureInfo.InvariantCulture, "A physical folder for services ({0}) already exists at: {1}", request.ServicesName, targetFolder)); } // Validate IIS configuration for service validationError = IISUtilities.PreValidateBuildIISEntities(request); if (!string.IsNullOrEmpty(validationError)) validationErrors.AppendLine(validationError); // Validate Audit configuration validationError = AuditingServiceManager.PreValidateAddAuditSiteSubscriptionId(); if (!string.IsNullOrEmpty(validationError)) validationErrors.AppendLine(validationError); } return validationErrors.ToString(); }