/// <summary> /// Supports managed resources disposal /// </summary> /// <param name="zoneName"></param> private void UpdateSoaRecord(string zoneName) { // get existing SOA record in order to read serial number try { //ManagementObject obj = GetWmiObject("MicrosoftDNS_Zone", "ContainerName = '{0}'", zoneName); //ManagementObject objSoa = GetRelatedWmiObject(obj, "MicrosoftDNS_SOAType"); ManagementObject objSoa = wmi.GetWmiObject("MicrosoftDNS_SOAType", "ContainerName = '{0}'", RemoveTrailingDot(zoneName)); if (objSoa != null) { if (objSoa.Properties["OwnerName"].Value.Equals(zoneName)) { string primaryServer = (string)objSoa.Properties["PrimaryServer"].Value; string responsibleParty = (string)objSoa.Properties["ResponsibleParty"].Value; UInt32 serialNumber = (UInt32)objSoa.Properties["SerialNumber"].Value; // update record's serial number string sn = serialNumber.ToString(); string todayDate = DateTime.Now.ToString("yyyyMMdd"); if (sn.Length < 10 || !sn.StartsWith(todayDate)) { // build a new serial number sn = todayDate + "01"; serialNumber = UInt32.Parse(sn); } else { // just increment serial number serialNumber += 1; } // update SOA record using (ManagementBaseObject methodParams = objSoa.GetMethodParameters("Modify")) { methodParams["ResponsibleParty"] = responsibleParty; methodParams["PrimaryServer"] = primaryServer; methodParams["SerialNumber"] = serialNumber; methodParams["ExpireLimit"] = ExpireLimit; methodParams["MinimumTTL"] = MinimumTTL; methodParams["TTL"] = MinimumTTL; methodParams["RefreshInterval"] = RefreshInterval; methodParams["RetryDelay"] = RetryDelay; ManagementBaseObject outParams = objSoa.InvokeMethod("Modify", methodParams, null); } // objSoa.Dispose(); } } } catch (Exception ex) { Log.WriteError(ex); } }