Exemplo n.º 1
0
        /// <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);
            }
        }