2010-09-22 16 views
8

Sto utilizzando WMI per creare diversi tipi di record DNS ma sto riscontrando un problema con i record SRV. Continuo a ricevere un errore "Non trovato" ogni volta che passo il parametro DomainName. Il nome di dominio mi sembra buono.Come creare un record SRV in DNS con C#

Qualcuno lo ha mai fatto con successo?

Ecco il mio codice:

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); 
    } 
+0

Qual è il nome di dominio che stai passando? – CodingGorilla

+0

_tcp._finger.parentdomain – mcass20

+0

Intendi * _finger._tcp.parentdomain *? [rfc2782] (http://tools.ietf.org/html/rfc2782) – dtb

risposta

4

sufficiente sostituire la linea di problematico con:

inParams["SRVDomainName"] = DomainName; 

Non so il motivo, ma quando ottiene l'elenco annunci per:

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

questo era il nome di questo campo (bug di Microsoft?)

HTH.

P.S. Per vedere il formato giusto per ogni campo, utilizzare wbemtest strumento (wbemtest dal prompt dei comandi), collegarsi al root \ MicrosoftDNS namespace ed eseguire la seguente query:

Select * from MicrosoftDNS_SRVType 

si dovrebbe usare lo stesso formato le istanze elencate nella risposta).

+0

GRAZIE! Per entrambi la soluzione e portare lo strumento wbemtest alla mia attenzione. – mcass20

0

Il record SRV corretta sarebbe _finger._tcp.example.com.

Non so WMI, ma il sistema potrebbe richiedere la creazione del nodo "vuoto non terminale" per _tcp.example.com.

EDIT

Credo vedo il problema ora - il vostro campo OwnerName dovrebbe essere quello di contenere _finger._tcp.example.com. Il campo DomainName contiene il target del record SRV.

http://msdn.microsoft.com/en-us/library/ms682736%28v=VS.85%29.aspx

+0

Grazie per i vostri suggerimenti. Ho provato a creare il dominio prima ma inutilmente. Sto ancora ricevendo lo stesso errore quando provo a passare il parametro DomainName in. – mcass20

+0

Cosa succede se lo provi senza i caratteri di sottolineatura? È possibile che WMI crede erroneamente che non sono legali. – Alnitak

+0

Grazie ancora ma ancora senza fortuna. Penso di essere l'unico ad averlo mai provato. – mcass20

2

vorrei aggiungere un po 'di dettagli qui per coloro che sono ancora in grado di farlo ...

Se il tuo Domain Name è google.com e se il Record è: _finger._tcp.google.com che punta verso il bersaglio ospite: hello.google.com poi le variabili ed i loro valori saranno come sotto:

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; 

Ho eseguito il test creando un'applicazione di esempio e creando zona google.com e impostando un record SRV e i relativi valori come menzionato sopra. Spero che aiuti coloro a cui altre risposte potrebbero sembrare un po 'meno esplicative.

+0

Correggere un errore. L'impostazione di DomainName durante il tentativo di creare un record SRV non è corretta! Per impostare TargetHost si deve impostare la proprietà SRVDomainName che non è purtroppo documentata da nessuna parte ... :( –

Problemi correlati