如何使用C#在DNS中创建SRV记录

时间:2010-09-22 18:52:32

标签: c# dns wmi srv

我正在使用WMI创建不同类型的DNS记录,但是SRV记录存在问题。每当我传递DomainName参数时,我都会收到“未找到”错误。域名对我来说很好。

有没有人成功地做到了这一点?

这是我的代码:

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

3 个答案:

答案 0 :(得分:4)

只需用以下内容替换有问题的行:

inParams["SRVDomainName"] = DomainName;

我不知道原因,但是当得到属性列表时:

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

这是该字段的名称(微软的错误?)

HTH。

P.S。要查看每个字段的正确格式,请使用wbemtest工具(来自命令提示符的wbemtest),连接到root \ MicrosoftDNS命名空间并运行以下查询:

Select * from MicrosoftDNS_SRVType

您应该使用与答案中列出的实例相同的格式。

答案 1 :(得分:2)

我想在这里为那些仍然无法获得它的人添加一些细节......

如果您的域名 google.com ,并且记录是: _finger._tcp.google.com 指向目标主机 hello.google.com ,然后变量及其值将如下所示:

    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;

我已经通过创建示例应用程序并创建了区域google.com并设置了SRV记录及其值来进行测试。我希望对其他回复可能听起来不太明白的人有所帮助。

答案 2 :(得分:0)

正确的SRV记录为_finger._tcp.example.com

我不知道WMI,但系统可能要求您先为_tcp.example.com创建“空的非终端”节点。

修改

我相信我现在看到了问题 - 您的 OwnerName 字段应该是包含_finger._tcp.example.com的字段。 DomainName 字段应包含SRV记录的目标

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