2012-11-15 15 views
5

पर देरी मुझे निर्देशिका के दौरान 2-5 सेकंड की प्रारंभिक देरी दिखाई दे रही है जब मैं DirectorySearcher FindOne() निष्पादित करता हूं और पहला नेटवर्क पैकेट जिसे मैं एलडीएपी सर्वर पर जाता हूं। प्रारंभिक निष्पादन के बाद, बाद के निष्पादन तुरंत 45 सेकंड के लिए पूर्ण हो जाते हैं। तेजी से निष्पादन की अवधि के बाद, अगला निष्पादन में देरी होगी और फिर सभी बाद के निष्पादन तुरंत पूरा हो जाएंगे। ऐसा लगता है कि कुछ प्रकार के कैशिंग चल रहे हैं, लेकिन मैं किसी भी संसाधन को पुष्टि करने में सक्षम नहीं हूं या प्रारंभिक देरी के कारण क्या वर्णन कर रहा हूं।निर्देशिका खोजकर्ता FindOne() प्रारंभिक निष्पादन

हमने इसे क्लाइंट विंडोज 2008 सर्वर पर देखा और फिर हमारे अपने विंडोज 2008 और विंडोज 7 बक्से पर पुन: उत्पन्न किया।

यहां मेरा सरल .NET 4.0 C# ऐप दिखता है। देरी "प्रारंभ" और "समाप्त" संदेशों के बीच होती है।

कोई विचार क्यों प्रारंभिक FindOne() निष्पादन पर यह देरी होती है? किसी भी प्रकार की मदद की बेहद सराहना की जाती है!

using System; 
using System.Collections.Generic; 
using System.Text; 

using System.DirectoryServices; 

namespace LdapTest 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string[] fetchAttributes; 
     fetchAttributes = new string[] { "{string[0]}" }; 

     using (DirectoryEntry searchRoot = new DirectoryEntry("LDAP://localserver/ou=lab,dc=ourdomain,dc=com", "cn=binduser,ou=Services,dc=ourdomain,dc=com", "Password", AuthenticationTypes.ReadonlyServer)) 
     { 
      using (DirectorySearcher searcher = new DirectorySearcher(searchRoot, "(sAMAccountName=UserName)", fetchAttributes, SearchScope.Subtree)) 
      { 
       Console.WriteLine("Started"); 
       SearchResult result = searcher.FindOne(); 
       Console.WriteLine("Finished"); 
      } 
     } 
    } 
} 
+1

http://stackoverflow.com/questions/1846436/system-directoryservices-is-slow – orange

+1

ईश्वर की मां !! यह वह प्रश्न था जिसके लिए मैं हफ्तों से समाधान ढूंढ रहा था !! धन्यवाद –

उत्तर

2

LDAP ADsPath MSDN article के अनुसार, यदि आप अपने किसी सर्वर के लिए LDAP पथ अंक बाध्यकारी यदि अनावश्यक नेटवर्क यातायात से बचने के लिए ServerBind ध्वज निर्दिष्ट करना चाहिए। यह सर्वर के पूर्ण DNS नाम देने की भी सिफारिश करता है। इसके अलावा, सर्वर पर इंगित करते समय ReadonlyServer ध्वज व्यर्थ है। तो मेरा पहला सुझाव ReadonlyServer ध्वज को ServerBind (और अधिमानतः पूर्ण DNS नाम दें) के साथ प्रतिस्थापित करना है, या स्ट्रिंग के सर्वर भाग को हटाएं (उदाहरण के लिए, इसे एलडीएपी: // ou = lab, dc = ourdomain, dc = कॉम या एलडीएपी: //ourdomain.com/ou=lab,dc=ourdomain,dc=com)।

दूसरी बात यह है कि आप विशिष्ट नाम से उपयोगकर्ता नाम प्रदान कर रहे हैं। यदि आप कोर एपीआई देखते हैं कि DirectoryEntry का उपयोग करता है, IADsOpenDSObject::OpenDSObject, यह आवश्यक है कि lpReserved ध्वज [AuthenticationTypes निर्देशिका निर्देशिका में पैरामीटर] शून्य [None] है या उपयोगकर्ता नाम के लिए एक विशिष्ट नाम पारित करते समय ADS_USE_SSL [SecureSocketsLayer] ध्वज शामिल है। ध्यान दें कि SecureSocketsLayer ध्वज की आवश्यकता है कि सक्रिय निर्देशिका के लिए आवश्यक है कि आप इस ध्वज का उपयोग करने से पहले एक प्रमाणपत्र सर्वर स्थापित हो। आप उपयोगकर्ता नाम को एक अलग प्रारूप में पास करना चाहेंगे।

अंत में, this MDSN page कहता है कि बिना किसी प्रमाणीकरण झंडे के उपयोगकर्ता नाम और पासवर्ड को क्लीयरक्स्ट भेजा जाता है। आपको Secure ध्वज जोड़ना चाहिए।

+0

धन्यवाद! WordOind से ReadOnlyServer से प्रमाणीकरण प्रकार को बदलने से पूरी अवधि 15 सेकंड से 2 सेकंड तक कम हो जाती है। – cooperaa

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