2010-09-22 7 views
8

Estoy usando WMI para crear diferentes tipos de registros DNS pero estoy teniendo un problema con los registros SRV. Sigo recibiendo un error "No encontrado" cada vez que paso el parámetro DomainName. El nombre de dominio me parece bien.¿Cómo creo un registro SRV en DNS con C#

¿Alguien ha hecho esto con éxito?

Aquí está mi código:

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

¿Cuál es el nombre de dominio que está transmitiendo? – CodingGorilla

+0

_tcp._finger.parentdomain – mcass20

+0

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

Respuesta

4

Sólo tiene que sustituir la línea problemática con:

inParams["SRVDomainName"] = DomainName; 

No sé la razón, pero cuando tiene la lista de propiedades por:

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

Este era el nombre de este campo (¿error de Microsoft?)

HTH.

P.S. Con el fin de ver el formato adecuado para cada campo, utilice wbemtest herramienta (wbemtest del símbolo del sistema), se conectan a raíz \ MicrosoftDNS espacio de nombres y ejecute la siguiente consulta:

Select * from MicrosoftDNS_SRVType 

debería utilizar el mismo formato que los casos enumerados en la respuesta).

+0

¡GRACIAS! Tanto para la solución como para traer la herramienta wbemtest a mi atención. – mcass20

0

El registro SRV correcta sería _finger._tcp.example.com.

No sé WMI, pero el sistema puede requerir que primero se cree el nodo "vacío sin terminal" para _tcp.example.com.

EDITAR

Creo que veo el problema ahora - su campo OwnerName debe ser el que contiene _finger._tcp.example.com. Se supone que el campo DomainName contiene el objetivo del registro SRV.

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

+0

Gracias por sus sugerencias. Intenté crear el dominio primero pero fue en vano. Sigo recibiendo el mismo error cuando intento pasar el parámetro DomainName. – mcass20

+0

¿Qué sucede si lo prueba sin los guiones bajos? Es posible que WMI crea incorrectamente que no son legales. – Alnitak

+0

Gracias de nuevo, pero todavía sin suerte. Creo que soy el único que ha intentado esto. – mcass20

2

me gustaría añadir un poco de detalle para los que todavía no son capaces de conseguirlo ...

Si su dominio Nombre es google.com y si el registro es: _finger._tcp.google.com apuntando hacia host de destino: hello.google.com a continuación las variables y sus valores serán las siguientes:

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; 

He probado creando una aplicación de muestra y creando la zona google.com y estableciendo un registro SRV y sus valores como se mencionó anteriormente. Espero que ayude a aquellos a quienes otras respuestas pueden sonar un poco menos explicativas.

+0

Corregido un error. ¡Establecer DomainName mientras intenta crear un registro SRV es incorrecto! Para establecer TargetHost uno tiene que establecer la propiedad SRVDomainName que lamentablemente no está documentada en ninguna parte ... :( –

Cuestiones relacionadas