8

我正在使用 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);
    }
4

3 回答 3

4

只需将有问题的行替换为:

inParams["SRVDomainName"] = DomainName;

我不知道原因,但是当通过以下方式获得属性列表时:

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

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

HTH。

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

Select * from MicrosoftDNS_SRVType

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

于 2010-10-05T14:10:13.073 回答
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 记录及其值进行了测试,如上所述。我希望它对那些其他回复可能听起来不太解释的人有所帮助。

于 2011-05-06T07:43:24.050 回答
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

于 2010-09-23T07:12:07.990 回答