2009-10-29 30 views
19

Tôi cần cập nhật một số mã truy vấn AD và muốn sử dụng đối tượng .NET 3.5 System.DirectoryServices.AccountManagement mới để truy vấn AD theo cách được quản lý trái với phương pháp hiện tại của chúng tôi khi sử dụng LDAP .Sự khác biệt giữa NativeGuid và Hướng dẫn trong Active Directory

Tôi gặp sự cố lạ khi đọc giá trị UserPrincipal.Guid. Nó chỉ ra rằng nó là tương tự nhưng khác với các hướng dẫn chúng tôi đã sử dụng thông qua LDAP.

Lúc đầu, họ nhìn hoàn toàn khác nhau, nhưng trên một mất thứ hai, tôi thấy rằng nửa cuối là giống hệt nhau và nửa đầu chỉ đơn giản là hoán ví dụ:

mới (.NET 3.5) Phương pháp GUID: -89ab-CDEF-0123-456789abcdef
Trước (LDAP) Phương pháp GUID: 67.452.301-ab89-efcd-0123-456789abcdef

tôi đã kiểm tra mã LDAP và thấy rằng chúng ta đang sử dụng SearchResult.GetDirectoryEntry () .NativeGuid trường để có được Old Guid.

Nó có một thuộc tính khác gọi là SearchResult.GetDirectoryEntry() .Hướng dẫn giống với GUID tôi truy xuất bằng các lớp Net 3.5 mới.

Câu hỏi của tôi là, tại sao chúng (loại) khác nhau và tôi nên sử dụng loại nào?

Trả lời

22

Như bạn đã đoán, chúng là cả hai biểu diễn của cùng một giá trị. Sự khác biệt là ở định dạng; DirectoryEntry.NativeGUID được hiển thị theo thứ tự nhỏ (không có dấu gạch ngang) là cách nó được lưu trữ "nguyên bản" trong dịch vụ thư mục và UserPricipal.GUID/DirectoryEntry.GUID được hiển thị theo thứ tự lớn (có dấu gạch ngang). Xem bài viết Wikipedia trên Endianess để biết chi tiết. Vì vậy khi bạn in ra giá trị cho NativeGUID (một chuỗi) nó sẽ không hiển thị bất kỳ dấu gạch ngang (như ví dụ của bạn không) trừ khi bạn tạo một GUID mới bằng cách sử dụng chuỗi như đầu vào (Guid ng = new Guid(de.NativeGuid);). Quay lại đầu trang | Điều đó sẽ tạo ra một số nhầm lẫn ...

Điều quan trọng là không kết hợp hai khi lưu trữ GUID trong nguồn dữ liệu ngoài hoặc lưu trữ NativeGUID làm GUID lớn. Vì vậy, tôi muốn đi cho UserPricipal.GUID/DirectoryEntry.GUID vì đó là cách objectGUID thuộc tính được hiển thị bằng cách sử dụng hầu hết các công cụ quản lý Windows (như Active Directory Users và Computers và ADSI Edit) và cách nó được lưu trữ và hiển thị trong SQL Server khi bạn sử dụng kiểu dữ liệu uniqueidentifier. Cũng thế; bạn sẽ cần phải đi "dưới đây" UserPrincipal (GetUnderlyingObject()) để có được NativeGUID-giá trị (hoặc chuyển đổi các tài sản UserPrincipal.GUID để little-endian).

Vì vậy, tôi đoán bạn sẽ phải quyết định có nên di chuyển dữ liệu "bên ngoài" hiện có của mình sang định dạng GUID hoặc tiếp tục sử dụng định dạng NativeGUID hay không. Ngay bây giờ tôi đoán bạn đang ở đâu đó ở giữa.

+0

Cảm ơn bạn! Đó là một sự trợ giúp rất lớn. –

Các vấn đề liên quan