我有這個奇怪的問題。我正在嘗試創建一個服務,將數據庫中的用戶同步到Active Directory(AD)中的電子郵件組中的用戶。因此,如果A,B,C在數據庫中並且活動目錄電子郵件組具有A,那麼我將同步AD。所以我會加'E'並刪除'B'&'C'。如果存在SQL相關的調用,UserPrincipal.FindByIdentity返回null否則返回正確的Principal對象
爲了讓用戶從數據庫中執行SQL調用。之後,如果我嘗試添加用戶,我將UserPrincipal.FindByIdentity設置爲null。這是我已經提出的測試代碼。
int tries = 0;
List<string> dbUsers = new List<string>();
dbUsers.Add("12345");//test user id's
dbUsers.Add("67891");
int k = 0;
for (k = 0; k < dbUsers.Count; k++)
{
AddUserToGroup(tries, dbUsers[k]);
}
public void AddUserToGroup(int tries, string userid)
{
try
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName, Container, userName, Password);
Principal user = Principal.FindByIdentity(ctx, userid);
string groupName = "TestGroup";
using (ctx)
{
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, groupName);
if (!user.IsMemberOf(group))
{
group.Members.Add(ctx, IdentityType.UserPrincipalName, user.UserPrincipalName);
group.Save();
}
}
}
catch (AppDomainUnloadedException ex)
{
if (tries > 5)
{
throw;
}
tries += 1;
Thread.Sleep(1000);
AddUserToGroup(tries, userid);
}
}
這片完美的作品,我得到正確的「用戶」對象,我可以成功地加入到AD電子郵件組。問題是當我使用SQL調用從數據庫獲取userId而不是硬編碼時。
所以這是有問題的代碼是:
int k = 0;
for (k = 0; k < dbUsers.Count; k++)
{
AddUserToGroup(tries, dbUsers[k]);
}
我的「用戶」是回來爲空:
List<string> dbUsers = GetActiveMembersFromDB('id')
public List<string> GetActiveMembersFromDB(string practiceGroupId)
{
List<string> outpt = new List<string>();
string SQLstring = string.Empty;
string SQL_CONNECTION_STRING = "connectionString";
SQLstring = "SELECT * from dbo.test";//whatever query
using (SqlConnection cn = new SqlConnection(SQL_CONNECTION_STRING))
{
cn.Open();
try
{
SqlCommand cm = new SqlCommand(SQLstring, cn);
using (SqlDataReader dr = cm.ExecuteReader())
{
if (dr.HasRows)
{
while (dr.Read())
{
outpt.Add(dr["userId"].ToString());
}
return outpt;
}
}
}
catch (Exception ex)
{
}
finally
{
if (cn != null)
{
SqlConnection.ClearPool(cn);
cn.Close();
}
}
}
return outpt;
}
從數據庫獲取用戶,如果我叫所以以後。
其他人遇到同樣的問題。數據庫調用和AD調用一起出現什麼問題?我的意思是,我關閉了數據庫調用中的所有連接,然後嘗試訪問Active Directory(AD)。
任何幫助表示讚賞。
感謝, Deeksha
謝謝凱德。我試圖鑽到最小的案例,發現DB中的用戶標識最後有一個空格。 再次感謝。 – 2012-02-28 22:44:02