C#を使用してDNSで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);
}
解決
問題のある行を次のように置き換えるだけです。
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
回答にリストされているインスタンスと同じ形式を使用する必要があります)。
他のヒント
まだそれを手に入れることができない人のために、ここに少し詳細を追加したいと思います...
もしあなたの ドメイン名 は 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レコードとその値を設定することでテストしました。他の返信が少し説明的であるように聞こえるかもしれない人々に役立つことを願っています。
正しい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