Wie kann ich einen SRV-Eintrag in DNS mit C #
Frage
ich WMI bin mit verschiedenen Arten von DNS-Einträgen zu erstellen, sondern ein Problem mit SRV-Datensätze habe. Ich erhalte einen „Not found“ Fehler, wenn ich den Domain Parameter übergeben. Der Domain-Name sieht gut aus für mich.
Hat jemand schon einmal erfolgreich das getan?
Hier ist mein 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);
}
Lösung
Ersetzen Sie einfach die problematische Zeile mit:
inParams["SRVDomainName"] = DomainName;
Ich weiß nicht den Grund, aber wenn bekommt die Eigenschaften nach:
PropertyData[] pd = new PropertyData[inParams.Properties.Count];
inParams.Properties.CopyTo(pd,0);
Dies war der Name dieses Feldes (Microsoft Bug?)
HTH.
P. S. Um das richtige Format für jedes Feld, um zu sehen, verwenden Sie wbemtest Werkzeug (wbemtest von Eingabeaufforderung), eine Verbindung zum root \ MicrosoftDNS Namespace und die folgenden Abfrage:
Select * from MicrosoftDNS_SRVType
Sie sollten das gleiche Format verwenden, wie die Instanzen in der Antwort aufgeführt).
Andere Tipps
Ich möchte ein bisschen Detail für diejenigen hier hinzufügen, die noch nicht in der Lage sind, es zu bekommen ...
Wenn Ihr Domain-Name ist google.com und wenn der Datensatz ist: _finger._tcp.google.com zeigt auf Ziel-Host : hello.google.com , dann werden die Variablen und ihre Werte werden als unter:
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;
Ich habe getestet in durch eine Beispielanwendung zu schaffen und die Schaffung von Zone google.com und Einstellen eines SRV-Eintrag und seine Werte wie erwähnt auf. Ich hoffe, dass es die hilft, die andere Antworten klingen mögen es etwas weniger erklärend.
Der richtige SRV-Eintrag _finger._tcp.example.com
sein würde.
Ich weiß nicht, WMI, aber das System kann die Sie auffordert, die „leere Nicht-Terminal“ Knoten für _tcp.example.com
zuerst zu erstellen.
Bearbeiten
Ich glaube, ich das Problem sehe jetzt - OwnerName
die ein _finger._tcp.example.com
enthalten sein sollte. Die DomainName
Feld soll die Ziel des SRV
Datensatz enthalten.
http://msdn.microsoft .com / en-us / library / ms682736% 28v = VS.85% 29.aspx