tags:

views:

103

answers:

2

I am using WMI to create different types of DNS records but am having a problem with SRV records. I keep getting a "Not found" error whenever I pass the DomainName parameter. The domain name looks good to me.

Has anyone ever successfully done this?

Here is my 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);
    }
A: 

The correct SRV record would be _finger._tcp.example.com.

I don't know WMI, but the system may be requiring you to create the "empty non-terminal" node for _tcp.example.com first.

EDIT

I believe I see the problem now - your OwnerName field should be the one to contain _finger._tcp.example.com. The DomainName field is supposed to contain the target of the SRV record.

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

Alnitak
Thanks for your suggestions. I've tried creating the domain first but to no avail. I'm still getting the same error when I try to pass the DomainName parameter in.
mcass20
What happens if you try it without the underscores? It's possible that WMI incorrectly believes that they're not legal.
Alnitak
Thanks again but still no luck. I think I am the only one to have ever attempted this.
mcass20
+1  A: 

Simply replace the problematic line with:

inParams["SRVDomainName"] = DomainName;

I don't know the reason, but when got the properties list by:

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

This was the name of this field (Microsoft's bug?)

HTH.

P.S. In order to see the right format for each field, use wbemtest tool (wbemtest from command prompt), connect to root\MicrosoftDNS namespace and run the following query:

Select * from MicrosoftDNS_SRVType

You should use the same format as the instances listed in the answer).

rursw1
THANK YOU! For both the solution and bringing wbemtest tool to my attention.
mcass20