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