C# Can';无法从IIS读取active directory用户,但可以在调试模式下读取
我在LDAP与Asp.net IIS应用程序之间存在问题。 我正在从Active directory读取用户,如下所示C# Can';无法从IIS读取active directory用户,但可以在调试模式下读取,c#,asp.net,ldap,iis-6,C#,Asp.net,Ldap,Iis 6,我在LDAP与Asp.net IIS应用程序之间存在问题。 我正在从Active directory读取用户,如下所示 public class ActiveDirectoryRepository : IActiveDirectoryRepository { #region Public methods List<User> IActiveDirectoryRepository.GetActiveDirectoryUsers(string l
public class ActiveDirectoryRepository : IActiveDirectoryRepository
{
#region Public methods
List<User> IActiveDirectoryRepository.GetActiveDirectoryUsers(string loginName)
{
List<User> activeDirectoryUsersList = new List<User>();
try
{
string activeDirectory = System.Configuration.ConfigurationManager.AppSettings["EDPUserDomain"];
var searchRoot = new DirectoryEntry(activeDirectory);
var search = new DirectorySearcher(searchRoot);
FormUserSearchFilter(loginName, search);
SearchResultCollection activeDirectoryUsers = search.FindAll();
if (activeDirectoryUsers != null)
{
for (int counter = 0; counter < activeDirectoryUsers.Count; counter++)
{
string userNameEmailString = string.Empty;
SearchResult result = activeDirectoryUsers[counter];
if (result != null && result.Properties.Contains("displayname"))
{
User activeDirectoryUser = new User();
if (result.Properties["givenname"].Count > 0)
{
activeDirectoryUser.FirstName = Convert.ToString(result.Properties["givenname"][0], CultureInfo.InvariantCulture);
}
if (result.Properties["sn"].Count > 0)
{
activeDirectoryUser.LastName = Convert.ToString(result.Properties["sn"][0], CultureInfo.InvariantCulture);
}
if (result.Properties["mail"].Count > 0)
{
activeDirectoryUser.email = Convert.ToString(result.Properties["mail"][0], CultureInfo.InvariantCulture);
}
if (result.Properties["distinguishedname"].Count > 0)
{
string[] domain = Convert.ToString(result.Properties["distinguishedname"][0], CultureInfo.InvariantCulture).Split(',');
if (domain[2] != null)
{
activeDirectoryUser.DomainName = domain[2].Replace("DC=", String.Empty);
}
}
if (result.Properties["samaccountname"].Count > 0)
{
activeDirectoryUser.UserName = Convert.ToString(result.Properties["samaccountname"][0], CultureInfo.InvariantCulture);
}
activeDirectoryUsersList.Add(activeDirectoryUser);
}
}
}
}
catch (Exception ex)
{
string filePath = @"C:\Mails\Error.txt";
using (StreamWriter writer = new StreamWriter(filePath, true))
{
writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
"" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
}
}
return activeDirectoryUsersList;
}
公共类ActiveDirectoryRepository:IActiveDirectoryRepository
{
#区域公共方法
列表IActiveDirectoryRepository.GetActiveDirectoryUsers(字符串登录名)
{
List activeDirectoryUsersList=新列表();
尝试
{
字符串activeDirectory=System.Configuration.ConfigurationManager.AppSettings[“EDPUserDomain”];
var searchRoot=新目录条目(activeDirectory);
var search=newdirectorysearcher(searchRoot);
FormUserSearchFilter(登录名,搜索);
SearchResultCollection activeDirectoryUsers=search.FindAll();
if(activeDirectoryUsers!=null)
{
对于(int counter=0;counter0)
{
activeDirectoryUser.FirstName=Convert.ToString(result.Properties[“givenname”][0],CultureInfo.InvariantCulture);
}
如果(结果属性[“序列号”]。计数>0)
{
activeDirectoryUser.LastName=Convert.ToString(result.Properties[“sn”][0],CultureInfo.InvariantCulture);
}
if(result.Properties[“mail”].Count>0)
{
activeDirectoryUser.email=Convert.ToString(result.Properties[“mail”][0],CultureInfo.InvariantCulture);
}
if(result.Properties[“differentiedName”].Count>0)
{
string[]domain=Convert.ToString(result.Properties[“differentiedName”][0],CultureInfo.InvariantCulture).Split(',');
如果(域[2]!=null)
{
activeDirectoryUser.DomainName=域[2]。替换(“DC=,String.Empty”);
}
}
if(result.Properties[“samaccountname”].Count>0)
{
activeDirectoryUser.UserName=Convert.ToString(结果.Properties[“samaccountname”][0],CultureInfo.InvariantCulture);
}
activeDirectoryUsersList.Add(activeDirectoryUser);
}
}
}
}
捕获(例外情况除外)
{
字符串文件路径=@“C:\Mails\Error.txt”;
使用(StreamWriter writer=newstreamwriter(filePath,true))
{
writer.WriteLine(“消息:+ex.Message+”
“+Environment.NewLine+”StackTrace:+ex.StackTrace+
“+Environment.NewLine+”日期:“+DateTime.Now.ToString());
writer.WriteLine(Environment.NewLine+“-----------------------------------------------------------------------------------------”+Environment.NewLine);
}
}
返回activeDirectoryUsersList;
}
上面的代码在调试模式下运行良好,但在IIS 6.1中部署应用程序后会抛出以下错误
Message :An operations error occurred.
<br/>
StackTrace : at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindAll()
at PW.EPD.DataAccess.Repository.ActiveDirectoryRepository.PW.EPD.DataAccess.Repository.IActiveDirectoryRepository.GetActiveDirectoryUsers(String loginName)
Date :5/20/2015 11:50:30 PM
-----------------------------------------------------------------------------
消息:发生操作错误。
StackTrace:at System.DirectoryServices.DirectoryEntry.Bind(布尔throwIfFail)
位于System.DirectoryServices.DirectoryEntry.Bind()处
在System.DirectoryServices.DirectoryEntry.get_AdsObject()中
位于System.DirectoryServices.DirectorySearcher.FindAll(布尔findMoreThanOne)
在System.DirectoryServices.DirectorySearcher.FindAll()中
位于PW.EPD.DataAccess.Repository.ActiveDirectoryRepository.PW.EPD.DataAccess.Repository.IActiveDirectoryRepository.GetActiveDirectoryUsers(字符串登录名)
日期:2015年5月20日晚上11:50:30
-----------------------------------------------------------------------------
请帮帮我。
提前谢谢