2012-01-03 21 views
7

तो मेरे पास एक सवाल है कि मैं ईमानदारी से नहीं जानता कि कैसे पूछना है। अनिवार्य रूप से मेरे पास थोड़ा सा कोड है जो इसे चलाने पर मेरी स्थानीय मशीन पर शानदार रूप से काम करता है। एक बार जब मैं इसे अपने विकास वेब सर्वर पर प्रकाशित करता हूं, तो यह विफल हो जाता है। मुझे यकीन नहीं है कि यह आईआईएस सेटअप समस्या है, web.config मुद्दा या कोडिंग समस्या है।सी # सक्रिय निर्देशिका प्रिंसिपल कॉन्टेक्स्ट/उपयोगकर्ता प्रिंसिपल। आईएसएमम्बरओएफ त्रुटि

यहाँ कोड

bool isMember = false; 

    PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); 
    UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

    if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim())) 
    { 
     isMember = true; 
    } 

    return isMember; 

कहाँ मैं एक उपयोगकर्ता नाम और एक समूह में पारित की टुकड़ा है और है कि उपयोगकर्ता उस समूह में एक सदस्य है अगर यह मुझसे कहता है। कोई बात नहीं। मेरी मशीन पर बहुत अच्छा काम करता है। मैं वेब सर्वर पर कि कोड प्रकाशित करने के लिए चला गया और यह विफल रहता है, जब यह लाइन

UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

यह इस त्रुटि फेंकता हिट:

[DirectoryServicesCOMException (0x80072020): An operations error occurred.]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +788
System.DirectoryServices.DirectoryEntry.Bind() +44
System.DirectoryServices.DirectoryEntry.get_AdsObject() +42
System.DirectoryServices.PropertyValueCollection.PopulateList() +29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +63
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +163 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +521217
System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +51
System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141
System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +42
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) +29
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue) +95
Cosmic.Web.Login.btnSubmit_Click(Object sender, EventArgs e) in C:\cosmic\Cosmic.Web\Login.aspx.cs:79
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691

कोई भी विचार जहां इस नाकाम रहने जा सकता है?

उत्तर

17

मेरा पहला अनुमान होगा: उस उपयोगकर्ता खाते के तहत आप इस कोड को चला रहे हैं जिसके पास सक्रिय निर्देशिका क्वेरी करने के लिए आवश्यक अनुमतियां नहीं हैं।

इसे ठीक करने के मूल रूप से आप इस से अपने निर्माता को बदलने की जरूरत:

PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain); 

को (वर्तमान, डिफ़ॉल्ट क्रेडेंशियल्स इस कोड के तहत चल रहा है के साथ ई करने के लिए एक कनेक्शन स्थापित करता है) यह:

PrincipalContext ADDomain = 
    new PrincipalContext(ContextType.Domain, "DOMAIN", useraccount, password); 

और उस उपयोगकर्ता खाते के लिए उपयोगकर्ता नाम और पासवर्ड प्रदान करें जो आपको पता है कि पर्याप्त विशेषाधिकार हैं ओ सक्रिय निर्देशिका क्वेरी।

+1

आप जानते हैं कि, यह वही था। वेबसर्वर में सक्रिय निर्देशिका को हिट करने के लिए सही प्रमाण-पत्र नहीं हैं। वहां कुछ प्रमाण-पत्र रखें और यह काफी बेहतर काम करता है। धन्यवाद! – Seril

संबंधित मुद्दे