2010-09-22 10 views
8

J'utilise WMI pour créer différents types d'enregistrements DNS mais j'ai un problème avec les enregistrements SRV. Je reçois toujours une erreur "Not found" chaque fois que je passe le paramètre DomainName. Le nom de domaine me semble bon.Comment créer un enregistrement SRV dans DNS avec C#

Est-ce que quelqu'un a déjà réussi cela?

Voici mon code:

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

Quel est le nom de domaine que vous transmettez? – CodingGorilla

+0

_tcp._finger.Parentdomain – mcass20

+0

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

Répondre

4

remplacer simplement la ligne problématique:

inParams["SRVDomainName"] = DomainName; 

Je ne connais pas la raison, mais quand a obtenu la liste des propriétés par:

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

C'était le nom de ce champ (bug de Microsoft?)

HTH.

P.S. Pour voir le bon format pour chaque champ, utilisez wbemtest outil (wbemtest d'invite de commande), connectez-vous à l'espace de noms racine \ MicrosoftDNS et exécutez la requête suivante:

Select * from MicrosoftDNS_SRVType 

Vous devez utiliser le même format que les cas répertoriés dans la réponse).

+0

MERCI! Pour la solution et pour apporter l'outil wbemtest à mon attention. – mcass20

0

L'enregistrement SRV correct serait _finger._tcp.example.com.

Je ne connais pas WMI, mais le système peut vous demander de créer le nœud "vide non-terminal" pour _tcp.example.com en premier.

EDIT

Je crois que je vois le problème maintenant - votre OwnerName champ devrait être celui de contenir _finger._tcp.example.com. Le champ DomainName est censé contenir la cible de l'enregistrement SRV.

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

+0

Merci pour vos suggestions. J'ai essayé de créer le domaine d'abord mais en vain. Je reçois toujours la même erreur lorsque j'essaie de passer le paramètre DomainName. – mcass20

+0

Que se passe-t-il si vous l'essayez sans les traits de soulignement? Il est possible que WMI pense à tort qu'ils ne sont pas légaux. – Alnitak

+0

Merci encore mais toujours pas de chance. Je pense que je suis le seul à avoir jamais essayé cela. – mcass20

2

Je voudrais ajouter un peu de détails ici pour ceux qui ne sont toujours pas obtenir ...

Si votre nom de domaine est google.com et si le enregistrement est: _finger._tcp.google.com pointant vers hôte cible: hello.google.com alors les variables et leurs valeurs seront aussi sous:

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; 

J'ai testé en créant un exemple d'application et en créant une zone google.com et en définissant un enregistrement SRV et ses valeurs comme mentionné. J'espère que cela aidera ceux à qui d'autres réponses peuvent sembler un peu moins explicatives.

+0

Correction d'une erreur. La définition de DomainName lors de la création d'un enregistrement SRV est incorrecte! Pour définir TargetHost, il faut définir la propriété SRVDomainName qui n'est malheureusement pas documentée nulle part ... :( –

Questions connexes