2010-09-22 16 views
8

Tôi đang sử dụng WMI để tạo các loại bản ghi DNS khác nhau nhưng đang gặp sự cố với bản ghi SRV. Tôi vẫn gặp lỗi "Không tìm thấy" bất cứ khi nào tôi chuyển tham số DomainName. Tên miền có vẻ tốt với tôi.Làm cách nào để tạo bản ghi SRV trong DNS với C#

Có ai từng thực hiện thành công việc này không?

Đây là mã của tôi:

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

Tên miền bạn đang truyền là gì? – CodingGorilla

+0

_tcp._finger.parentdomain – mcass20

+0

Bạn có nghĩa là * _finger._tcp.parentdomain * không? [rfc2782] (http://tools.ietf.org/html/rfc2782) – dtb

Trả lời

4

Đơn giản chỉ cần thay thế dòng có vấn đề với:

inParams["SRVDomainName"] = DomainName; 

Tôi không biết lý do, nhưng khi nhận được danh sách các thuộc tính bởi:

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

Đây là tên của trường này (lỗi của Microsoft?)

HTH.

P.S. Để xem các định dạng phù hợp với từng lĩnh vực, sử dụng wbemtest công cụ (wbemtest từ dấu nhắc lệnh), kết nối với root \ MicrosoftDNS namespace và chạy các truy vấn sau đây:

Select * from MicrosoftDNS_SRVType 

Bạn nên sử dụng định dạng giống như các trường hợp niêm yết trong câu trả lời).

+0

CẢM ƠN BẠN! Đối với cả hai giải pháp và đưa công cụ wbemtest đến sự chú ý của tôi. – mcass20

0

Các bản ghi SRV đúng sẽ là _finger._tcp.example.com.

Tôi không biết WMI, nhưng hệ thống có thể yêu cầu bạn tạo nút "không có thiết bị đầu cuối trống" cho _tcp.example.com trước tiên.

EDIT

Tôi tin rằng tôi thấy vấn đề bây giờ - lĩnh vực OwnerName của bạn nên là một để chứa _finger._tcp.example.com. Trường DomainName được cho là chứa mục tiêu của bản ghi SRV.

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

+0

Cảm ơn các đề xuất của bạn. Tôi đã thử tạo miền trước nhưng không có kết quả. Tôi vẫn nhận được lỗi tương tự khi tôi cố gắng chuyển tham số DomainName vào. – mcass20

+0

Điều gì sẽ xảy ra nếu bạn dùng thử mà không có dấu gạch dưới? Có thể WMI không chính xác tin rằng chúng không hợp pháp. – Alnitak

+0

Cảm ơn bạn một lần nữa nhưng vẫn không có may mắn. Tôi nghĩ rằng tôi là người duy nhất đã từng thử điều này. – mcass20

2

Tôi muốn thêm một chút chi tiết ở đây cho những ai vẫn không thể có được nó ...

Nếu miền của bạn Têngoogle.com và nếu Ghi là: _finger._tcp.google.com chỉ tay về phía host mục tiêu: hello.google.com sau đó các biến và giá trị của chúng sẽ như dưới:

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; 

Tôi đã thử nghiệm bằng cách tạo một ứng dụng mẫu và tạo vùng google.com và thiết lập một bản ghi SRV và các giá trị của nó như đã đề cập. Tôi hy vọng nó sẽ giúp những người mà những câu trả lời khác có vẻ ít giải thích hơn.

+0

Đã sửa lỗi. Đặt DomainName trong khi cố tạo bản ghi SRV không chính xác! Để đặt TargetHost người ta phải thiết lập tài sản SRVDomainName đó là đáng buồn không tài liệu bất cứ nơi nào ... :( –