Как мне создать запись SRV в DNS с C #
Вопрос
Я использую WMI для создания различных типов записей DNS, но у меня возникла проблема с записями SRV. Я продолжаю получать ошибку «не найден» всякий раз, когда я передаю параметр DomainName. Доменное имя выглядит хорошо для меня.
Кто-нибудь когда-либо успешно сделал это?
Вот мой код:
internal static void CreateSrvRecordInDns(string Zone, string OwnerName, string DomainName, UInt16 Weight, UInt16 Priority, UInt16 Port)
{
DnsProvider dns = new DnsProvider();
ManagementClass mClass = new ManagementClass(dns.Session, new ManagementPath("MicrosoftDNS_SrvType"), null);
ManagementBaseObject inParams = mClass.GetMethodParameters("CreateInstanceFromPropertyData");
inParams["DnsServerName"] = dns.Server;
inParams["ContainerName"] = Zone;
inParams["OwnerName"] = OwnerName;
inParams["DomainName"] = DomainName; //Error occurs here
inParams["Port"] = Port;
inParams["Priority"] = Priority;
inParams["Weight"] = Weight;
mClass.InvokeMethod("CreateInstanceFromPropertyData", inParams, null);
dns.Dispose(ref inParams);
dns.Dispose(ref mClass);
}
Решение
Просто замените проблемную линию с:
inParams["SRVDomainName"] = DomainName;
Я не знаю причину, но когда получил список свойств:
PropertyData[] pd = new PropertyData[inParams.Properties.Count];
inParams.Properties.CopyTo(pd,0);
Это было название этого поля (ошибка Microsoft?)
Хет
PS Чтобы увидеть правильный формат для каждого поля, используйте WBEMTEST Tool (WBEMTEST из командной строки), подключитесь к пространству имен root Microsoftdns и выполните следующий запрос:
Select * from MicrosoftDNS_SRVType
Вы должны использовать тот же формат, что и экземпляры, перечисленные в ответе).
Другие советы
Я хотел бы добавить немного деталей здесь для тех, кто все еще не может получить ...
Если ваш доменное имя является Google.com. и если то Записывать является : _finger._tcp.google.com. указывая на целевой хост : hello.google.com. Тогда переменные и их ценности будут как под:
inParams["DnsServerName"] = dns.Server;
inParams["ContainerName"] = Zone; //google.com
inParams["OwnerName"] = OwnerName; //_finger._tcp.google.com
// Can't set domain name like this, leave this field
//inParams["DomainName"] = DomainName; //_tcp.google.com
//Set Target SRV Host here which is providing the service,,,
inParams["SRVDomainName"] = DomainName; //target Host : hello.google.com
inParams["Port"] = Port;
inParams["Priority"] = Priority;
inParams["Weight"] = Weight;
Я проверил, создав образец приложения и созданию зоны Google.com и устанавливать запись SRV и его значения, как упоминалось. Я надеюсь, что это поможет тем, кому другие ответы могут звучать, немного менее пояснительно.
Правильная запись SRV будет _finger._tcp.example.com
.
Я не знаю WMI, но система может потребовать, чтобы вы создали «пустой нетелемный» узел для _tcp.example.com
первый.
РЕДАКТИРОВАТЬ
Я верю, что я вижу проблему сейчас - ваш OwnerName
поле должно быть, чтобы содержать _finger._tcp.example.com
. Отказ То DomainName
поле должно содержать цель принадлежащий SRV
записывать.
http://msdn.microsoft.com/en-us/library/ms682736%28v=vs.85%29.aspx.