Как создать запись SRV в DNS с C # - PullRequest
8 голосов
/ 22 сентября 2010

Я использую 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);
    }

Ответы [ 3 ]

4 голосов
/ 05 октября 2010

Просто замените проблемную строку на:

inParams["SRVDomainName"] = DomainName;

Я не знаю причину, но когда получил список свойств по:

PropertyData[] pd = new PropertyData[inParams.Properties.Count];
inParams.Properties.CopyTo(pd,0);

Это было имя этогополе (ошибка Microsoft?)

HTH.

PS Чтобы увидеть правильный формат для каждого поля, используйте инструмент wbemtest (wbemtest из командной строки), подключитесь к пространству имен root \ MicrosoftDNS и запуститеследующий запрос:

Select * from MicrosoftDNS_SRVType

Вы должны использовать тот же формат, что и экземпляры, перечисленные в ответе.

2 голосов
/ 06 мая 2011

Я хотел бы добавить здесь немного подробностей для тех, кто все еще не может получить его ...

Если ваше доменное имя равно 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 и ее значения, как указано выше.Я надеюсь, что это поможет тем, кому другие ответы могут показаться немного менее объяснительными.

0 голосов
/ 23 сентября 2010

Правильная запись 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

...