الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أربط Activedirectory مع Login Control

بدأه AboMoayad في 10 فبراير 2008 · 24 رد · 4,396 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

حتى يتم قراءة المستخدمين من Active Direcotory

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#2

إن كنت تملك الوقت فانتظر حتى اجد الوقت في القريب كي أقوم بكتابة مثال .. فأنا أفكر في هذا منذ فترة و عندي مثال و لكن مدمج مع أكواد عديدة ..

سأقوم بعرضه قريبا إن شاء الله

مبرمج القاعده كتب:
حتى يتم قراءة المستخدمين من Active Direcotory

You can fly while you can touch the sky

#3

على افتراض:

اسم الدومين:sps1dev

اسم المستخدم:Administrator (يمكنك وضع اي مستخدم بشرط ان يكون له خاصية قراءة الActive Directory)

كلمة سر المستخدم:mypassword

الكود النالي يوضع في الweb.config:

<connectionStrings> 
		<clear/>

		<add name="MyMembershipProviderConnectionString" connectionString="LDAP://sps1dev.com/dc=sps1dev,dc=com"/>

</connectionStrings>

والتالي في web.config بداخل <system.web>

<membership defaultProvider="MyMembershipProvider">
			<providers>
				<clear/>
				<add name="MyMembershipProvider"
	type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web,Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
   connectionStringName="MyMembershipProviderConnectionString"
  connectionUsername="sps1dev\Administrator" connectionPassword="mypassword"
	enableSearchMethods="true" 
	attributeMapUsername="sAMAccountName"/>


			</providers>
		</membership>

يجب ان تستخدم الform authentication في الweb.config :

<authentication mode="Forms">
			<forms loginUrl="login.aspx"/>
		</authentication>

الان ضع عنصر تحكم Login و شغل الصفحة

تم تعديل هذه المشاركة بواسطة madani في 13 فبراير 2008 في 18:12

#4

سبقني مدني مشكورا .. وضح جزء مهم جدا ..

عموما انا قمت بعمل تكميلي .. بعضه من اجتهادي و بعضه من الانترنت ( بتعرفوا حياة المطور)

الكلاس كالتالي:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Principal;
using System.Web.UI;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;


namespace DotNetLibrary.Components
{
	public class ActiveDirectory
	{
		DirectoryEntry entry;
		public ActiveDirectory()
		{

		}

		public DirectoryEntry GetDirectoryEntry()
		{
			 entry = new DirectoryEntry(Web.GetWebConfigValue("ActiveDirectoryAccount"),
			 Web.GetWebConfigValue("ActiveDirectoryUserId"),
			 Web.GetWebConfigValue("ActiveDirectoryPWD"));
			return entry;
		}
		public static bool IsValidUser(string username, string pwd)
		{
			return ((System.Web.Security.ActiveDirectoryMembershipProvider)System.Web.Security.Membership.Provider).ValidateUser(username,pwd);
		}

		public bool UserExists(string userAccount)
		{
			DirectoryEntry de = GetDirectoryEntry();
			DirectorySearcher deSearch = new DirectorySearcher();

			deSearch.SearchRoot = de;
			deSearch.Filter = "(&(objectClass=user) (userPrincipalName=" + userAccount + "))";

			SearchResultCollection results = deSearch.FindAll();

			return results.Count > 0;
		}

		public string FindName(string userAccount)
		{
			DirectoryEntry entry = GetDirectoryEntry();
			String account = userAccount.Replace(@"Domain\", "");

			try
			{
				DirectorySearcher search = new DirectorySearcher(entry);
				search.Filter = "(SAMAccountName=" + account + ")";
				search.PropertiesToLoad.Add("displayName");

				SearchResult result = search.FindOne();

				if (result != null)
				{
					return result.Properties["displayname"][0].ToString();
				}
				else
				{
					return "Unknown User";
				}
			}
			catch (Exception ex)
			{
				string debug = ex.Message;

				return "Error: User is unknown";
			}
		}

		public bool ValidateUser(string username, string password)
		{
			DirectoryEntry de = GetDirectoryEntry();
		   // de.Username = username;
			//de.Password = password;

			DirectorySearcher ds = new DirectorySearcher(de);
			// try this sAMAccountName: mohammed_khalil
			ds.Filter = ("(&(objectclass=user)(objectcategory=person)(mail=" + username + "))");

			ds.SearchScope = SearchScope.Subtree;

			SearchResult results = ds.FindOne();

			//if (results != null)
			//{
			//	try
			//	{
			//		DirectoryEntry updateEntry = results.GetDirectoryEntry();
			//		updateEntry.Properties["department"].Value = "";
			//		updateEntry.CommitChanges();
			//		updateEntry.Close();
			//	}
			//	catch (Exception ex)
			//	{
			//		tbError.Text = ex.ToString();
			//	}
			//}
			bool isFound = false;
			if (results != null) isFound = true;
			de.Close();
			return isFound;
		}

		public void ModifyUser(string userDisplayName, string username, string password)
		{
			DirectoryEntry de = GetDirectoryEntry();
			de.Username = username;
			de.Password = password;

			DirectorySearcher ds = new DirectorySearcher(de);
			ds.Filter = ("(&(objectclass=user)(objectcategory=person)(displayname=" + userDisplayName + "))");

			ds.SearchScope = SearchScope.Subtree;

			SearchResult results = ds.FindOne();

			if (results != null)
			{
				try
				{
					DirectoryEntry updateEntry = results.GetDirectoryEntry();
					updateEntry.Properties["department"].Value = "";
					updateEntry.CommitChanges();
					updateEntry.Close();
				}
				catch (Exception ex)
				{

				}
			}

			de.Close();
		}

	}

}

يمكنك استخدام هذا الكلاس من أجل عدة وظائف كالبحث بداخل ال Active Directory عن مستخدمين .. إعادة بيانات المستخدم .. التأكد من بيانات الحساب وووووو

انا قمت بإضافة بعض المفاتيح المرتبطة في ملف Web.Config

	<add key="ActiveDirectoryAccount" value="LDAP://ServerName"/>
		<add key="ActiveDirectoryUserId" value="mohammedk"/>
		<add key="ActiveDirectoryPWD" value="yourPasswordGoesHere"/>
		<add key="ActiveDirectoryPath" value="LDAP://ServerName/DC=yourDomainControllerName,DC=com"/>

أيضا لا تنسى بأن تضيف مرجع Reference ل

System.DirectoryServices من خلال ال

Solution Explorer -> Add Reference

ماذا أيضا؟

كما قال مدني

لا تنس في ملف Web.Config بأن تضع التالي:

<authentication mode="Forms">
			<forms name="MyFormsAuthentication" timeout="1440" slidingExpiration="false"/>
		</authentication>
		<authorization>
			<Deny users="?"/>
		</authorization>

لست متأكدا إن كنت تستطيع الاستغناء عن Deny Users

حظا موفقا

تم تعديل هذه المشاركة بواسطة محمد خليل أبو صلاح في 13 فبراير 2008 في 23:45

You can fly while you can touch the sky

#5

استفسار بسيط .. في احدى الشركات التي زرتها كان لديهم شبكه داخليه مكونه من سيرفر واحد عليه دومين و 98 جهاز مرتبط به

الــ 98 جهاز تعني 98 مستخدم مسجلين في الدومين على سيرفر الشركه .

الان البرنامج الذي يخدم نظام الشركه Web Applection .. الذي اعجبني فيه ان المستخدمين عند ولوجهم على اجهزتهم وتسجيل دخولهم على الدومين وفتح المتصفح الذي يعرض الصفحه الرئيسيه لنظامهم مكتوب في اعلى الصفحه اهلا وسهلا بك يا ( احمد مبارك ) احمد مبارك هذا هو المستخدم الذي سجل دخوله على جهازه الموجود على الشبكه .... ولم تكن هناك حاجه لطلب ادخال اسم مستخدم و كلمة مرور .

ماهي الطريقه او الكود المستخدم لتنفيذ هذه العمليه .. جلب اسم المستخدم الذي سجل دخوله عند ارتباطه بالموقع وفتح الصفحه الرئيسيه .

تم تعديل هذه المشاركة بواسطة العقده في 15 فبراير 2008 في 12:54

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#6

اخي,الذي ذكرته اسمه Windows Authentication و كل ما يجب عليك عمله لتشغيله هو تحديد نوع الauthentication في ملف web.config:

<authentication mode="Windows">

		</authentication>

يمكنك عرض اسم المستخدم في الصفحة كالتالي:

User.Identity.Name

تم تعديل هذه المشاركة بواسطة madani في 16 فبراير 2008 في 00:14

#7

ما شاء الله تبارك الله .. جزاكم الله خير ..

ان شاء سأبدأ تجربة الكود عما قريب ..

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#8

هذا أيضا كلاس مكمل كتبته ليتمم بعض مهام الكلاس السابق .. يعرض بعض النقاط تخدمك في حال استخدمت في ال Authntication mode الخاصية Forms لانك لو استخدمت Windows سوف تجد نفسك قد دخلت بالعادة مباشرة للصفحة ولكن مع استخدام Forms سوف تتعرض لك لوحة الدخول والتي تقوم باستخدام ال Login الخاص به و لكن بالداخل ستجد مكتوبا مرحبا بك يا محمد خليل ابو صلاح مع أنني دخلت باسم MOhammedk مثلا..

هذا هو الكود:

using System;
using System.Data;
using DotNetLibrary.Components;

namespace DotNetLibrary.Components
{

	public class User
	{
		Database db; 			
		private DataRow userRecord;
		private int userId;
		private string userName,userPassword,email,country;
		public User(int userID)
		{ 
			this.db = new Database();
			this.userId=userID;
			this.db.AddParam("userID",SqlDbType.Int,userID);
			this.userRecord=db.GetDataRow("SP_GetUserInfo");
		}
		public string UserName
		{
			get {return this.userRecord["userName"].ToString();}
			set {this.userName=value;}
		}
		public string UserPassword
		{
			get {return this.userRecord["userPassword"].ToString();}
			set {this.userPassword=value;}
		}
		public string Email
		{
			get {return this.userRecord["email"].ToString();}
			set {this.email=value;}
		}
		public string Country
		{
			get {return this.userRecord["country"].ToString();}
			set {this.country=value;}
		}
		public string UserType
		{
			get { return this.userRecord["userType"].ToString(); }
		}
		public static string GetADUserName
		{
			get
			{
				ActiveDirectory AD = new ActiveDirectory();
				return AD.FindName(System.Web.HttpContext.Current.User.Identity.Name.ToString());
			}
		}

		public static string GetADUserNameByID(string UserID)
		{
				ActiveDirectory AD = new ActiveDirectory();
				return AD.FindName(UserID);
		}

		static string GetUserDetails(string output)
		{
			Database db = new Database();
			db.ClearParams();
			db.AddParam("UserAccount", SqlDbType.VarChar, System.Web.HttpContext.Current.User.Identity.Name.ToString());
			db.AddParam("OutputType", SqlDbType.VarChar, output);
			db.AddOutputParam("returnedValue", SqlDbType.VarChar, 50);
			db.ExecNonQuery("Users_CheckAccountType_SP");
			return db.GetOutputParam("returnedValue").ToString();
		}

		public static DataTable GetLocalUsers(string AccountType)
		{
			Database db = new Database();
			db.AddParam("AccountType", SqlDbType.NVarChar, AccountType);
			return db.GetDataTable("Select_Users_ByAccountType_SP");
		}


		public static string GetUserAccountType
		{
			get
			{
				return User.GetUserDetails("AccountType");
			}
		}
		public static bool IsSuperUser
		{
			get
			{
				if(User.GetUserDetails("IsSuperUser").ToString()=="1")
					return true;
				else
				return false;
			}
		}
	}
}

من اجل كتابة جملة ترحيبية تحمل الاسم الكامل بالمستخدم استدعي التالي:

lblWelcome.Text = " مرحبا بك يا  " + User.GetADUserName

اعتقد انك تملك كل الاحتياجات .. يبقى ان توظفها :)

شكرا لك مدني على المداخلات الجميلة

You can fly while you can touch the sky

#9

اخ مدني لم تظهر اي نتائج علما أن Web.Config تم ضبط authentication mode="Windows

using System;
using System.Data;
using System.Net;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Specialized;
using System.Security.Principal;




public partial class _Default : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{

	}
	protected void Button1_Click(object sender, EventArgs e)
	{
		Label1.Text =User.Identity.Name.ToString();  

	}

}

اما بالنسبه لكود محمد خليل أبو صلاح ساجربه وارجع لكم بالنتائج ....

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#10

أضفت جزئية لكلاس ActiveDirectory.cs تقوم بجلب جميع أسماء المسجلين في ال Active Directory تحت اسم FindAll()

public ArrayList FindAll()
		{
			ArrayList accounts = new ArrayList();
			DirectoryEntry de = GetDirectoryEntry();
			DirectorySearcher deSearch = new DirectorySearcher();

			deSearch.SearchRoot = de;
			deSearch.SearchScope = SearchScope.Subtree;

			deSearch.Filter = "(objectCategory=person)";

			SearchResultCollection res = deSearch.FindAll();
			foreach (SearchResult sc in res)
			{
				foreach (string myCollection in sc.Properties["cn"])
				{
					accounts.Add(myCollection);
				}
			}
			return accounts;

		}

هناك ملاحظة في السطر:

 deSearch.Filter = "(objectCategory=person)";

يمكنكم استبدال كلمة person ب computer او computers لا اذكر (اعتقد الاولى صحيحة) لتعيد اسماء السيرفرات المرتبطة بالنطاق

تحياتي لكم

You can fly while you can touch the sky

#11

استفساري هل يمكن جلب اسم المستخدم الذي قام بالتسجيل .. وذلك للاسباب التاليه :

جميع الاجهزة مرتبطه بسيرفر ولا يمكن تجاوز ذلك الا بالدخول باسم مستخدم وكلمة مرور مسجله في السيرفر .

الان أي مستخدم يفتح صفحة الموقع الرئيسي على الشبكه الداخليه طبيعي انه تم دخوله بشكل نظامي ومسجل في السيرفر هل ممكن بـــ Request او بأي امر انا لا اعلم حتى الان ان اقوم بجلب اسم المستخدم وعرضه في الصفحه لكي اتمكن بعد ذلك بربط جميع عملياته في الموقع باسمه الذي قام بالتسجيل به .. فما الحاجه لمطالبته مره اخرى عند فتح الصفحه لادخال اسم المستخدم وكلمة المرور ..

اما بالنسبه لمجهود الاستاذ : محمد خليل أبو صلاح أكيد ان الفكره من استخدام مثاله لها أستخدامات اخرى بالنسبة لي . وأشكره كما أشكر الاخ مدني على مداخلته وعلى أمل أن أجد عندكم حل لهذه المسأله . علما ان موضوعكم قريب مما أهدف اليه .

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#12

كما قال لك الاخ مدني .. اجعل نوع ال Authintication=windows

و من خلال الكلاسات التي وضعتها يمكنك التعامل مع ال ActiveDirectory بحيث تمرر له User.Identity.Name و يعيد لك الاسم الكامل للشخص.

أنصحك بأن تجرب قبل أن تسأل .. فقد تجد اكثر مما تريد :)

You can fly while you can touch the sky

#13

السلام عليكم

اخوي محمد خليل < ولا يهون كل من قراء الموضوع >

اذا كان وقتك يسمح حبيت تشرحلي كود كلاس كامل يقوم بانشاء الـ ActiveDirectory برمجيا و ادارة محتوياته

حيث انني اعمل على مشروع control panel لسيرفر استضافة محلي

ولك جزيل الشكر

سبحان الله و بحمده سبحان الله العظيم

#14
اقتباس
أنصحك بأن تجرب قبل أن تسأل .. فقد تجد اكثر مما تريد

عزيزي محمد خليل ابو صلاح لقد قمت بتجربة كود الاخ مدني ولم تظهر لي أي نتائج .

وهذا اقتباس لردي في الصفحه الاولى لهذا الموضوع .

اقتباس
اخ مدني لم تظهر اي نتائج علما أن Web.Config تم ضبط authentication mode="Windows

أنصحك أن تقرأ الردود قبل أن تجاوب .. فقد تجد ما تنصح بتجربة ما لم تجربه . :rolleyes:

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#15

لم أكتب ردي وانا لا اعلم ماذا كتب .. لكن انت يجب ان تستوعب ماذا كتب لك من نصحك و اعطاك من وقته :)

انا قلت لك ارجع لطريقة مدني باستخدام ال Windows بدل ال Forms في ال Authentication

ولكن استخدم الكلاس الذي انا كتبته أيضا ليكون مكملا لما ستقوم بعمله من اتباع لطريقة مدني..

يعني تقوم بعمل نسخة من كلاس ActiveDirectory باسم AD مثلا

ثم تقوم بتمرير التالي:

lblWelcome.Text = "مرحبا يا " +  AD.GetADUserName;

بتعرف .. بصراحة حسيت بندم إني اتعبت نفسي بالمشاركة بهالموضوع .. اتمنى ان تتوخى الدقة والحذر قبل أن ترد على أي شخص عالأقل تقديرا لمن يساعدك

الأخت لانا .. والله بودي اشرح للجميع لكن للأسف انا مقبل على عملية جراحية في الايام القليلة القادمة والله يستر .. إن شاء الله بعد ما ارجع سوف اقوم بفتح موضوع خاص بموضوع ال Active Directory شارحا قدر الإمكان اغلب ما يحتاجه المطورون على قدر المعلومة التي أملكها فقط

تحياتي للجميع

You can fly while you can touch the sky

#16

عزيزي محمد خليل أبو صلاح أولاً سأبدأ بالأهم قبل المهم فالأهم أن يكلل الله عز وجل ما أنت مقبل عليه من عملية جراحيه بالنجاح وينعم عليك بالصحة والعافية .

ثانياً أنا لم أقلل من شأنك فرحم الله أمرءاً عرف قدر نفسه ومثلك قدره معروف ومحفوظ وجهده ملموس وأقدر لك مساعدتك .

أنا يا عزيزي محمد جربة مثال الاخ مدني بجعل authentication mode=Windows وليس Forms كما أنني أستخدمت طرق أخرى عن طريق بحثي بالنت كــ System.Windows.Forms.SystemInformation.UserName و WindowsIdentity.GetCurrent().Name لكن للاسف لم ترجع بأي قيمة اصلا .

أخيرا حبيت أعيد وأوضح لك مره أخرى أنني أستخدمت .. أستخدمت الامثله أعلاه ولم تفلح معي ؟! وعموما لا تحس بندم ولا تعب بمشاركتك الموضوع أنا علقت الفكره للوصول لهذه المعلومه لاجلا غير مسمى . وأنا من سيخرج من الموضوع فبقائك فيه أفود ( فأنا من يسأل وأنت من يجيب ) .

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#17

انا لا يهمني اي تعليق او شكر .. هدفي أن يستفيد الجميع وانت منهم ..

عموما دعنا نعود للأهم ..

طريقة مدني لوحدها لا تكفيك .. قلت لك استخدم كلاس ال ActiveDirectory الذي قمت بوضعه كي ترى النتيجة المطلوبة :)

You can fly while you can touch the sky

#18

الاخ العقدة,

انشأ موقع جديد من خلال visual studio

افتح ملف web.config

تاكد من وجود :

<authentication mode=Windows/>

الكود التالي سيظهر لك اسم المستخدم الحالي ,اي الذي دخل على الكمبيوتر:

protected void Page_Load(object sender, EventArgs e)
	{
		Label1.Text =User.Identity.Name;

	}

والكود التالي سيظهر لك اسمه الكامل ,اي الاسم و لقب العائلة

protected void Page_Load(object sender, EventArgs e)
	{
		Label1.Text = new System.DirectoryServices.DirectoryEntry("WinNT://" + User.Identity.Name.Replace("\\","/")).Properties["FullName"].Value.ToString();

	}

اذا كنت تبحث عن حل متكامل يمكنك من ادارة اسماء المستخدمين و صلاحياتهم و خصائصهم فما ذكره الاخ محمد يفيد في هذا المجال.

تم تعديل هذه المشاركة بواسطة madani في 18 فبراير 2008 في 08:50

#19

اخوي محمد خليل اول شي الله يقومك لنا بالسلامة و ما تشوف شر ان شاء الله في عدوينك

ثانيا انا بانتظار شرحك بفارغ الصبر

اقتباس
ثانياً أنا لم أقلل من شأنك فرحم الله أمرءاً عرف قدر نفسه ومثلك قدره معروف ومحفوظ وجهده ملموس وأقدر لك مساعدتك .

كل واحد يصلح سيارته وا ما صار الا كل خير انتم اخوان و انا عارفة الشي هذا

اقتباس
وأنا من سيخرج من الموضوع فبقائك فيه أفود ( فأنا من يسأل وأنت من يجيب ) .

صدقني لو كل واحد فينا ياخذ الموضوع بحساسية شديدة كان ماصار في اعضاء ولا في زوار ولا اي احد

عالعموم ما صار الا كل خير

سبحان الله و بحمده سبحان الله العظيم

#20

انا ليه سؤال غريب اوي

ايه هو الفائدة من أستخدام المستخدمين من Active Direcotory في البرنامج اللي هعمله، يعني ده بديل من اني اشغل نفسي بموضوع المستخدمين في برنامجي وعمل حسابه في قاعدة البيانات بتاعت البرنامج ولا ايه بالضبط؟

شكرا

شكرا

#21
الطائر التركي كتب:
انا ليه سؤال غريب اوي

ايه هو الفائدة من أستخدام المستخدمين من Active Direcotory في البرنامج اللي هعمله، يعني ده بديل من اني اشغل نفسي بموضوع المستخدمين في برنامجي وعمل حسابه في قاعدة البيانات بتاعت البرنامج ولا ايه بالضبط؟

شكرا

على حسب فكرة البرنامج , ممكن يقول لك مدير ودي أسمح لمجموعة المستخدمين على الدومين الفلاني بالدخول فقط

وكان عددهم 300 مستخدم , بالله هل من العقل اعداة كتابتهم من جديد وهم موجودين على الدومين

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#22

السلام عليكم

اقتباس
انا ليه سؤال غريب اوي

ايه هو الفائدة من أستخدام المستخدمين من Active Direcotory في البرنامج اللي هعمله، يعني ده بديل من اني اشغل نفسي بموضوع المستخدمين في برنامجي وعمل حسابه في قاعدة البيانات بتاعت البرنامج ولا ايه بالضبط؟

الاخ الطائر التركي ... تخيل انك مصمم برنامج لشركة يوجد بها مئات وربما الاف الموظفين ... ويوجد في هذه الشركة شبكة تحوي Active Direcotory

بجميع الموظفين وإداراتهم واقسامهم ومجموعاتهم وصلاحياتهم وبياناتهم ... أليس من الافضل استيراد ( نقل ) كل هذه البيانات من Active Direcotory

بدل ان تقوم انت عن طريق برنامجك بتكرارها من الصفر ... كما هناك ميزة اخرى وهي انه في حالة تغيرت صلاحيات اي موظف او اي من بياناته فذلك لن يغير

في برنامج شئ لانك معتمد على بيانات Active Direcotory.

ارجوا ان اكون قد اوضحت الفكرة ... موفق اخي الكريم.

اللهم وفقنا لما تحب وترضى

photo-25148.png

Microsoft Certified Technology Specialists in Microsoft SQL Server 2005

#23

السلام عليكم

تصادفنى مشاكل في هذا الموضوع فارجوا المساعدة

1- الكود الاول الدي كتبته هو الموجود في ردود الاخوة و هو يعمل عندي بنسبة 80% لكن هناك Time out تقلق المستخدمين وكذلك نحن المبرمجين و اريد التخلص من هذه الاخظاء البحث يكون في 3   سرفورات مختلفة الاول في فرنسا و انجليترا و امريكا .

DirectoryEntry entry = new DirectoryEntry("LDAP://" + ddlSubDomain.SelectedValue, sADRequesterLogin, sADRequesterPassword);
        DirectorySearcher dsearch = new DirectorySearcher(entry);

 

حسننا لم اجد تحسبن في كود السي شارب فقررة عمل شياء اخر لنفس الغرض

2- عن طريق سكل سرفر و استعلام على LDAP

http://msdn.microsoft.com/en-us/library/windows/desktop/aa772380%28v=vs.85%29.aspx

 

ولوجود مشاكل على سرفر USA و الذي لم يجدوا له حل خارج عن ارادتي

 

قررت مجدد البحث عن طريقه اخرى ربما الكل يستعمل نفس الشئ لكن كي اكتب تقرير و ابرا نفسي .

3- استعمال استعلامات  WMI

لكن لم يشتغل معي ارجوا المساعدة لتصحيح هدا

 

 

 public static ManagementScope CreateNewManagementScope()
        {
            //IPGEMEA
            ConnectionOptions connection = new ConnectionOptions();
            connection.Username = "Administrator";
            connection.Password = "arabteam";
            connection.Impersonation = ImpersonationLevel.Impersonate;
            connection.Authentication = AuthenticationLevel.PacketPrivacy;
            ManagementScope scope = new ManagementScope(@"\\zekiriabd.com\root\directory\LDAP",connection);
            return scope;
        }


        public static List<string> GetServicesForComputer(string strUsername)
        {
            ManagementScope scope = CreateNewManagementScope();

            SelectQuery query = new SelectQuery("SELECT * FROM ds_user ");

            List<string> serviceNames = null;
            try
            {
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
                {
                    ManagementObjectCollection services = searcher.Get();
                }
            }
            catch (Exception exception)
            {
                //lblErrors.Text = exception.Message;
            }
            return serviceNames;
        }
    }
#24

للرفع

#25

موضوع مهم ،،

ويعطيكم العافيه على المعلومات الموجوده فيه ،،

أنا سأحاول تطبيق ما هو مكتوب فيه.

وأحتاج لمعرفة إذا فيه إمكانيه لإضافة مستخدم جديد

وكذلك تعديل بياناته ورقمه السري

وحذفه من الدومين أيضاً.

مواضيع مشابهة