/// <summary> /// This method gets invoked when the command is called /// </summary> protected override void InternalProcessRecord() { SPIisWebServiceApplicationPool resolvedApplicationPool = this.ApplicationPool.Read(); if (resolvedApplicationPool == null) { this.ThrowTerminatingError(new InvalidOperationException("Could not find the specified application pool."), ErrorCategory.InvalidOperation, this); } if (this.ShouldProcess(this.Name)) { // Get or create the service ClubCloudService service = ClubCloudService.GetOrCreateService(); // Get or create the service proxy ClubCloudServiceProxy.GetOrCreateServiceProxy(); // Install the service instances to servers in this farm ClubCloudServiceInstance.CreateServiceInstances(service); // Create the service application ClubCloudServiceApplication application = new ClubCloudServiceApplication(this.Name, service, resolvedApplicationPool); application.Update(); application.Provision(); // Database settings if (string.Equals(this.ParameterSetName, "DB", StringComparison.OrdinalIgnoreCase)) { NetworkCredential databaseCredentials = null; if (this.DatabaseCredentials != null) { databaseCredentials = (NetworkCredential)this.DatabaseCredentials; } SPDatabaseParameters databaseParameters = SPDatabaseParameters.CreateParameters(this.DatabaseName, this.DatabaseServerName, databaseCredentials, this.DatabaseFailoverServerName, SPDatabaseParameterOptions.None); // Create the database ClubCloudDatabase database = new ClubCloudDatabase(databaseParameters); // Provision the database (runs the Create scripts) database.Provision(); // Grant the database the proper permissions database.GrantApplicationPoolAccess(resolvedApplicationPool.ProcessAccount.SecurityIdentifier); // Add the failover server instance (the base class does not do this for you) if (!string.IsNullOrEmpty(this.DatabaseFailoverServerName)) { database.AddFailoverServiceInstance(this.DatabaseFailoverServerName); } // Establish a relationship between the service application and the database application.Database = database; application.Update(); } this.WriteObject(application); } }
/// <summary> /// ServerValidate event. /// </summary> /// <param name="sender">The Sender.</param> /// <param name="e">The EventArgs.</param> protected void CustomValidatorServiceNameDuplicate_ServerValidate(object sender, ServerValidateEventArgs e) { if (e == null) { throw new ArgumentNullException("e"); } string serviceName = e.Value; if (string.Equals(this.ServiceApplication.Name, serviceName, StringComparison.CurrentCultureIgnoreCase)) { e.IsValid = true; return; } // Get the service ClubCloudService service = ClubCloudService.GetOrCreateService(); // Try to get a duplicate service application ClubCloudServiceApplication duplicate = SPFarm.Local.GetObject(serviceName, service.Id, typeof(ClubCloudServiceApplication)) as ClubCloudServiceApplication; if (duplicate != null) { e.IsValid = false; } else { e.IsValid = true; } }
/// <summary> /// Click event. /// </summary> /// <param name="sender">The Sender.</param> /// <param name="e">The EventArgs.</param> protected void ButtonRemoveService_Click(object sender, EventArgs e) { using (SPLongOperation operation = new SPLongOperation(this)) { operation.LeadingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceRemoveOperationLeadingHtml", CultureInfo.CurrentCulture).ToString(); operation.TrailingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceRemoveOperationTrailingHtml", CultureInfo.CurrentCulture).ToString(); operation.Begin(); ClubCloudService.RemoveService(); operation.End("/_admin/ClubCloud.Service/ManageService.aspx"); } }
/// <summary> /// Creates the service application. /// </summary> private void CreateApplication() { using (SPLongOperation operation = new SPLongOperation(this)) { operation.LeadingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "CreateOperationLeadingHtml", CultureInfo.CurrentCulture).ToString(); operation.TrailingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "CreateOperationTrailingHtml", CultureInfo.CurrentCulture).ToString(); operation.Begin(); try { ClubCloudService service = ClubCloudService.GetOrCreateService(); ClubCloudServiceProxy serviceProxy = ClubCloudServiceProxy.GetOrCreateServiceProxy(); // Create the application pool IisWebServiceApplicationPoolSection applicationPoolSectionCasted = this.applicationPoolSection as IisWebServiceApplicationPoolSection; SPIisWebServiceApplicationPool applicationPool = applicationPoolSectionCasted.GetOrCreateApplicationPool(); // Create the service application ClubCloudServiceApplication application = new ClubCloudServiceApplication( this.textBoxServiceName.Text.Trim(), service, applicationPool); application.Update(); application.Provision(); // Create the service application proxy ClubCloudServiceApplicationProxy proxy = new ClubCloudServiceApplicationProxy( string.Format( CultureInfo.CurrentCulture, HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ServiceApplicationProxyNameTemplate", CultureInfo.CurrentCulture).ToString(), this.textBoxServiceName.Text.Trim()), serviceProxy, application.Uri); proxy.Update(); proxy.Provision(); if (this.checkBoxIncludeInDefaultProxy.Checked) { SPServiceApplicationProxyGroup group = SPServiceApplicationProxyGroup.Default; group.Add(proxy); group.Update(); } operation.EndScript("window.frameElement.commitPopup();"); } catch (Exception ex) { SPUtility.TransferToErrorPage(ex.ToString()); } } }
/// <summary> /// Click event. /// </summary> /// <param name="sender">The Sender.</param> /// <param name="e">The EventArgs.</param> protected void ButtonInstallServiceInstances_Click(object sender, EventArgs e) { using (SPLongOperation operation = new SPLongOperation(this)) { operation.LeadingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstallServiceInstancesOperationLeadingHtml", CultureInfo.CurrentCulture).ToString(); operation.TrailingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstallServiceInstancesOperationTrailingHtml", CultureInfo.CurrentCulture).ToString(); operation.Begin(); // Get the service ClubCloudService service = ClubCloudService.GetOrCreateService(); // Create the service instances ClubCloudServiceInstance.CreateServiceInstances(service); operation.End("/_admin/ClubCloud.Service/ManageService.aspx"); } }
/// <summary> /// Click event. /// </summary> /// <param name="sender">The Sender.</param> /// <param name="e">The EventArgs.</param> protected void ButtonInstallService_Click(object sender, EventArgs e) { using (SPLongOperation operation = new SPLongOperation(this)) { operation.LeadingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstallOperationLeadingHtml", CultureInfo.CurrentCulture).ToString(); operation.TrailingHTML = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstallOperationTrailingHtml", CultureInfo.CurrentCulture).ToString(); operation.Begin(); // Install the service ClubCloudService service = ClubCloudService.GetOrCreateService(); // Install the service instances but do not start (provision) them (let the admin do this on the services on server screen). ClubCloudServiceInstance.CreateServiceInstances(service); // Install the service proxy ClubCloudServiceProxy.GetOrCreateServiceProxy(); operation.End("/_admin/ClubCloud.Service/ManageService.aspx"); } }
/// <summary> /// This method gets invoked when the command is called /// </summary> protected override void InternalProcessRecord() { // Validate a farm exists SPFarm farm = SPFarm.Local; if (farm == null) { this.ThrowTerminatingError(new InvalidOperationException("SharePoint server farm not found."), ErrorCategory.ResourceUnavailable, this); } SPServer server = SPServer.Local; if (server == null) { this.ThrowTerminatingError(new InvalidOperationException("SharePoint local server not found."), ErrorCategory.ResourceUnavailable, this); } if (this.ShouldProcess(SPFarm.Local.Name)) { // Remove the service ClubCloudService.RemoveService(); } }
/// <summary> /// Validate the arguments. /// </summary> protected override void InternalValidate() { // Validate a farm exists SPFarm farm = SPFarm.Local; if (farm == null) { this.ThrowTerminatingError(new InvalidOperationException("SharePoint server farm not found."), ErrorCategory.InvalidOperation, this); } SPServer server = SPServer.Local; if (server == null) { this.ThrowTerminatingError(new InvalidOperationException("SharePoint local server not found."), ErrorCategory.InvalidOperation, this); } // Get the service ClubCloudService service = SPFarm.Local.Services.GetValue <ClubCloudService>(); if (service != null) { // Check for duplicate name SPServiceApplication application = service.Applications[this.Name]; if (application != null) { this.ThrowTerminatingError(new InvalidOperationException("A service application with that name already exists."), ErrorCategory.InvalidOperation, this); } } if (string.IsNullOrEmpty(this.DatabaseServerName)) { this.DatabaseServerName = SPWebService.ContentService.DefaultDatabaseInstance.NormalizedDataSource; } }
/// <summary> /// Page_Load event. /// </summary> /// <param name="sender">The Sender.</param> /// <param name="e">The EventArgs.</param> protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { // Populate the controls with default values ClubCloudService service = SPFarm.Local.Services.GetValue <ClubCloudService>(); ClubCloudServiceProxy proxy = SPFarm.Local.ServiceProxies.GetValue <ClubCloudServiceProxy>(); if (service != null) { this.literalServiceStatus.Text = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceStatusLabelInstalled", CultureInfo.CurrentCulture).ToString(); this.imageServiceStatus.ImageUrl = "/_admin/ClubCloud.Service/ServiceInstalled.gif"; this.buttonInstallService.Visible = false; this.buttonRemoveService.Visible = true; this.serviceInstanceStatusSection.Visible = true; this.serviceApplicationStatusSection.Visible = true; } else { this.literalServiceStatus.Text = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceStatusLabelNotInstalled", CultureInfo.CurrentCulture).ToString(); this.imageServiceStatus.ImageUrl = "/_admin/ClubCloud.Service/ServiceNotInstalled.gif"; this.buttonInstallService.Visible = true; this.buttonRemoveService.Visible = false; this.buttonInstallServiceInstances.Visible = false; this.serviceInstanceStatusSection.Visible = false; this.serviceApplicationStatusSection.Visible = false; } if (proxy != null) { this.imageServiceProxyStatus.ImageUrl = "/_admin/ClubCloud.Service/ServiceInstalled.gif"; this.literalServiceProxyStatus.Text = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceStatusLabelInstalled", CultureInfo.CurrentCulture).ToString(); } else { this.imageServiceProxyStatus.ImageUrl = "/_admin/ClubCloud.Service/ServiceNotInstalled.gif"; this.literalServiceProxyStatus.Text = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceStatusLabelNotInstalled", CultureInfo.CurrentCulture).ToString(); } // Check if the service instances have been provisioned, and show their status List <ServiceInstanceStatus> serviceInstances = new List <ServiceInstanceStatus>(); foreach (SPServer server in SPFarm.Local.Servers) { if (server.Role == SPServerRole.Application || server.Role == SPServerRole.SingleServer || server.Role == SPServerRole.WebFrontEnd) { ServiceInstanceStatus serviceInstance = new ServiceInstanceStatus(); serviceInstance.ServerName = server.Name; serviceInstance.ServerId = HttpUtility.UrlEncode(server.Id.ToString()); serviceInstances.Add(serviceInstance); ClubCloudServiceInstance instance = server.ServiceInstances.GetValue <ClubCloudServiceInstance>(); if (instance == null) { serviceInstance.ServerStatus = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstanceStatusNotInstalled", CultureInfo.CurrentCulture).ToString(); serviceInstance.IsInstalled = false; serviceInstance.ServerStatusImage = "/_admin/ClubCloud.Service/HLTHFAIL.PNG"; } else if (instance.Status == SPObjectStatus.Online) { serviceInstance.ServerStatus = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstanceStatusStarted", CultureInfo.CurrentCulture).ToString(); serviceInstance.IsInstalled = true; serviceInstance.ServerStatusImage = "/_admin/ClubCloud.Service/HLTHSUCC.PNG"; } else { serviceInstance.ServerStatus = HttpContext.GetGlobalResourceObject("ClubCloud.Service.ServiceAdminResources", "ManageServiceInstanceStatusStopped", CultureInfo.CurrentCulture).ToString(); serviceInstance.IsInstalled = true; serviceInstance.ServerStatusImage = "/_admin/ClubCloud.Service/HLTHERR.PNG"; } } } this.gridViewInstanceStatus.DataSource = serviceInstances; this.gridViewInstanceStatus.DataBind(); if (service != null) { this.gridViewApplicationStatus.DataSource = service.Applications; this.gridViewApplicationStatus.DataBind(); } } }
/// <summary> /// This method gets invoked when the command is called /// </summary> protected override void InternalProcessRecord() { Uri applicationUri = null; SPServiceApplication resolvedApplication = null; ClubCloudServiceApplication castedApplication = null; if (this.ServiceApplication == null && string.IsNullOrEmpty(this.Uri)) { this.ThrowTerminatingError(new InvalidOperationException("No service application or Uri was provided."), ErrorCategory.InvalidOperation, this); } if (this.ServiceApplication != null) { resolvedApplication = this.ServiceApplication.Read(); if (resolvedApplication == null) { this.ThrowTerminatingError(new InvalidOperationException("Service application not found."), ErrorCategory.InvalidOperation, this); } castedApplication = resolvedApplication as ClubCloudServiceApplication; if (castedApplication == null) { this.ThrowTerminatingError(new InvalidOperationException("Service application was not of the correct type."), ErrorCategory.InvalidOperation, this); } applicationUri = castedApplication.Uri; if (string.IsNullOrEmpty(this.Name)) { this.Name = castedApplication.Name + " Proxy"; } } else { applicationUri = new Uri(this.Uri); } if (this.ShouldProcess(this.Name)) { // Ensure the service exists ClubCloudService.GetOrCreateService(); // Ensure the proxy exists ClubCloudServiceProxy serviceProxy = ClubCloudServiceProxy.GetOrCreateServiceProxy(); // Create the service application proxy ClubCloudServiceApplicationProxy proxy = new ClubCloudServiceApplicationProxy(this.Name, serviceProxy, applicationUri); proxy.Update(); proxy.Provision(); if (this.DefaultProxyGroup.ToBool()) { SPServiceApplicationProxyGroup group = SPServiceApplicationProxyGroup.Default; group.Add(proxy); group.Update(); } this.WriteObject(proxy); } }
/// <summary> /// This method gets invoked when the command is called /// </summary> protected override void InternalProcessRecord() { SPServiceApplication resolvedApplication = null; ClubCloudServiceApplication castedApplication = null; resolvedApplication = this.Identity.Read(); if (resolvedApplication == null) { this.ThrowTerminatingError(new InvalidOperationException("No service application was found."), ErrorCategory.InvalidOperation, this); } castedApplication = resolvedApplication as ClubCloudServiceApplication; if (castedApplication == null) { this.ThrowTerminatingError(new InvalidOperationException("The service application provided was not of the correct type."), ErrorCategory.InvalidOperation, this); } if (this.ShouldProcess(castedApplication.Name)) { // Update the name if (!string.IsNullOrEmpty(this.Name) && (!string.Equals(this.Name.Trim(), castedApplication.Name, StringComparison.OrdinalIgnoreCase))) { // Get the service ClubCloudService service = SPFarm.Local.Services.GetValue <ClubCloudService>(); if (service != null) { // Check for duplicate name SPServiceApplication duplicateApplication = service.Applications[this.Name.Trim()]; if (duplicateApplication != null) { this.ThrowTerminatingError(new InvalidOperationException("A service application with that name already exists."), ErrorCategory.InvalidOperation, this); } } castedApplication.Name = this.Name.Trim(); } // Update the application pool if (this.ApplicationPool != null) { SPIisWebServiceApplicationPool resolvedApplicationPool = this.ApplicationPool.Read(); if (resolvedApplicationPool != null) { castedApplication.ApplicationPool = resolvedApplicationPool; } } if (this.DatabaseCredentials != null) { NetworkCredential databaseCredentials = (NetworkCredential)this.DatabaseCredentials; castedApplication.Database.Username = databaseCredentials.UserName; castedApplication.Database.Password = databaseCredentials.Password; } else if (!string.IsNullOrEmpty(castedApplication.Database.Username)) { castedApplication.Database.Username = null; castedApplication.Database.Password = null; } if (!string.IsNullOrEmpty(this.DatabaseFailoverServerName)) { castedApplication.Database.AddFailoverServiceInstance(this.DatabaseFailoverServerName); } else if (castedApplication.Database.FailoverServer != null) { castedApplication.Database.AddFailoverServiceInstance(null); } castedApplication.Database.Update(); castedApplication.Update(); } }