private async Task RemovePotentialDuplicateBindingAsync(PortalHostingEnvironment environment, TWebsite tempWebsite, CrmWebsiteBinding newBinding) { // Wait for a random time span between 400ms and 800ms. var random = new Random(); var milliseconds = random.Next(400, 800); Thread.Sleep(milliseconds); // Query for the website bindings to see if a duplicate exists. var website = await this.ExpandWebsite(tempWebsite); var bindings = website.Bindings .Where(binding => MatchSiteName(binding.SiteName, environment.SiteName) && MatchVirtualPath(binding.VirtualPath, environment.ApplicationVirtualPath)) .ToList(); if (bindings.Count > 1) { // Remove the binding if it was created by this thread. if (tempWebsite.RemoveWebsiteBinding(newBinding)) { await this.Store.UpdateAsync(tempWebsite); ADXTrace.Instance.TraceWarning(TraceCategory.Application, "Duplicate website binding detected and deleted."); } } }
private static bool MatchDates(CrmWebsiteBinding binding) { var now = DateTime.UtcNow; return(binding.ReleaseDate.GetValueOrDefault(DateTime.MinValue) < now && binding.ExpirationDate.GetValueOrDefault(DateTime.MaxValue) > now); }