c# - استثناء COM Active Directory-حدث خطأ في عمليات(0x80072020)




.net exception active-directory (8)

الحصول على استثناء COM متقطعة " حدث خطأ في عمليات (0x80072020) " (كما هو موضح أدناه) عند محاولة الاستعلام Active Directory باستخدام الأسلوب GroupPrincipal.FindByIdentity

هنا الكود:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, "Group to find");

أتلقى استثناء:

Inner Exception: System.Runtime.InteropServices.COMException (0x80072020): An operations error occurred.
  at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
  at System.DirectoryServices.DirectoryEntry.Bind()
  at System.DirectoryServices.DirectoryEntry.get_AdsObject()
  at System.DirectoryServices.PropertyValueCollection.PopulateList()
  at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
  at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
  at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
  at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
  at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
  at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
  at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate)
  at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue)
  at System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue)

يتم تشغيل التعليمات البرمجية من خدمة Windows على خادم Windows 2003 المزود بحزمة الخدمة SP2 .

لقد وجدت سؤال آخر حول ، Active Directory ، تعداد مجموعات المستخدم ، استثناء COM ، مما يوحي بأن تمكين Kerberos كخيار في مُنشئ PrincipalContext سيعمل على حل هذه المشكلة لكنني أتلقى رمزًا عشريًا مختلفًا عن هذا السؤال.

أسئلتي هي :

  1. هل هذا استثناء COM بالتحديد مشكلة مصادقة؟ أحتاج إلى التأكد من أن ذلك سيعمل على حل المشكلة بنسبة 100٪ قبل إصدار البرنامج.
  2. هل هناك مورد في مكان ما يسرد كل رموز ست عشري استثناء COM ممكن حتى أتمكن من مساعدة نفسي أفضل قليلا في المستقبل؟

Answers

حدث هذا لي في ASP.NET (Windows 2008 R2 / IIS7) حيث كنت العبث مع Web.config وبدأ هذا الخطأ يحدث في كل مكالمة FindByIdentity. كان السبب الرئيسي في تشغيل تجمع التطبيقات هو DefaultAppPool ، وبدأ العمل مرة أخرى بعد أن قمت بتغييره ليعمل كخدمة شبكة. أنا لا أفهم تماما لماذا ستتغير ، لكنها فعلت.


منح هذا بعد عامين ، واجهت هذا ووجدت أن ما يلي حل مشكلتي:

using System.Web.Hosting;
...
...
// Code here runs as the logged on user

using (HostingEnvironment.Impersonate()) {
// This code runs as the application pool user
     DirectorySearcher searcher ...
}

reference


كان لي نفس المشكلة. لقد حصلت على النجاح بعد تغيير تجمع التطبيقات على النحو التالي: نموذج عملية تحميل ملف تعريف المستخدم = صحيح


بالنسبة لي ، واجهت نفس المشكلة مع محاولة تسجيل الدخول إلى أحد وحدات التحكم بالمجال ، لدى وحدات التحكم بالمجال 2 ، واحد منهم يعمل والآخر لا يعمل ، وأعتقد أن لديها علاقة مع ملف تعريف المستخدم ، لا يزال التحقيق ...


إذا حصلت على رمز خطأ ، "حدث خطأ في العمليات (0x80072020)" ، فقد يعني "تم رفض الوصول" .

  • تحقق من خادم الويب الخاص بك أم لا في مجال AD
    • إذا لم يكن لديك لوضع المصادقة في PrincipalContext.
مثال (شيء مثل هذا):
public bool foo(String username, String password) {
    string ADIPaddress = "[ipaddress]";
    ContextOptions options = ContextOptions.Negotiate;
    PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, AD_IPaddress, null, options, username, password);
    bool isAuthenticated = principalContext.ValidateCredentials(username, password, options);
    return isAuthenticated;
}
مرجع

لقد وجدت الآن إجابة أخرى غير قادر على إضافة مستخدم مع CrmService API في Dynamics CRM والتي تنص على أن 0x80072020 هو في الواقع مشكلة إذن. لقد قمت بتغيير الخدمة الخاصة بي للتشغيل تحت حساب مستوى النطاق بدلاً من حساب النظام المحلي ويبدو أن هذا قد شفي مشكلتي.


في حالتي ، تم تشغيل تجمع تطبيقات الويب كـ "DefaultAppPool" الذي لم يكن لديه وصول كافٍ للاتصال بـ Active Directory الخاص بالشركة. لذلك ، انتحلت شخصية حساب لديه حق الوصول إلى AD في الرمز الخاص بي وكل شيء سار على ما يرام.


DataTable dt=new DataTable();
Datacolumn Name = new DataColumn("Name");
Name.DataType= typeoff(string);
Name.AllowDBNull=false; //set as null or not the default is true i.e null
Name.MaxLength=20; //sets the length the default is -1 which is max(no limit)
dt.Columns.Add(Name);
Datacolumn Age = new DataColumn("Age", typeoff(int));`

dt.Columns.Add(Age);

DataRow dr=dt.NewRow();

dr["Name"]="Mohammad Adem"; // or dr[0]="Mohammad Adem";
dr["Age"]=33; // or dr[1]=33;
dt.add.rows(dr);
dr=dt.NewRow();

dr["Name"]="Zahara"; // or dr[0]="Zahara";
dr["Age"]=22; // or dr[1]=22;
dt.rows.add(dr);
Gv.DataSource=dt;
Gv.DataBind();




c# .net exception com active-directory