以下代码在我的本地计算机上的Visual Studio开发环境中正常工作。但是,当我将文件移动到Windows 2008 R2 IIS 7.5计算机时,我收到以下错误:
[DirectoryServicesCOMException(0x80072020):操作错误 发生了。 ] _Default.GetFullName(String strLoginName,String& STR_FIRST_NAME,字符串& STR_LAST_NAME,String& STR_DISPLAY_NAME, 字符串和放大器; STR_MAIL,String& STR_OFFICE_PHONE,String& STR_ADDRESS) c:\ AuthTest \ Default.aspx.cs:87 _Default.Page_Load(Object sender, EventArgs e)在c:\ AuthTest \ Default.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+25 System.Web.UI.Control.LoadRecursive() +71 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 3064
我在IIS上启用了Windows身份验证,所以我不确定我是否遗漏了其他内容。我的本地计算机和Web服务器都位于同一个域中。
这是我的代码:
using System;
using System.DirectoryServices;
using System.Web.Hosting;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Gets the extracted User Name using a method.
string strUserID = ExtractUserName(User.Identity.Name.ToString());
string STR_FIRST_NAME;
string STR_LAST_NAME;
string STR_DISPLAY_NAME;
string STR_MAIL;
string STR_OFFICE_PHONE;
string STR_ADDRESS;
GetFullName(strUserID, out STR_FIRST_NAME, out STR_LAST_NAME, out STR_DISPLAY_NAME,
out STR_MAIL, out STR_OFFICE_PHONE, out STR_ADDRESS);
lblHello.Text = "Your User ID is: " + strUserID;
TextBox1.Text =
"Your name is: " + STR_FIRST_NAME + " " + STR_LAST_NAME + Environment.NewLine +
"Display Name: " + STR_DISPLAY_NAME + Environment.NewLine +
"Email address: " + STR_MAIL + Environment.NewLine +
"Office Phone: " + STR_OFFICE_PHONE + Environment.NewLine +
"Address: " + STR_ADDRESS;
}
//Retrives User Name from DomainName\\UserName
private static string ExtractUserName(string path)
{
string[] userPath = path.Split(new char[] { '\\' });
return userPath[userPath.Length - 1];
}
public static string GetFullName(string strLoginName,
out string STR_FIRST_NAME,
out string STR_LAST_NAME,
out string STR_DISPLAY_NAME,
out string STR_MAIL,
out string STR_OFFICE_PHONE,
out string STR_ADDRESS)
{
string userName = ExtractUserName(strLoginName);
SearchResult result = null;
using (HostingEnvironment.Impersonate())
{
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(SAMAccountName={0})", userName);
search.PropertiesToLoad.Add("cn");
STR_FIRST_NAME = "";
STR_LAST_NAME = "";
STR_DISPLAY_NAME = "";
STR_MAIL = "";
STR_OFFICE_PHONE = "";
STR_ADDRESS = "";
try
{
result = search.FindOne();
foreach (System.Collections.DictionaryEntry direntry in result.Properties)
{
STR_FIRST_NAME = result.GetDirectoryEntry().Properties["givenName"].Value.ToString();
STR_LAST_NAME = result.GetDirectoryEntry().Properties["SN"].Value.ToString();
STR_DISPLAY_NAME = result.GetDirectoryEntry().Properties["DisplayName"].Value.ToString();
STR_MAIL = result.GetDirectoryEntry().Properties["mail"].Value.ToString();
STR_OFFICE_PHONE = result.GetDirectoryEntry().Properties["telephoneNumber"].Value.ToString();
STR_ADDRESS = result.GetDirectoryEntry().Properties["streetAddress"].Value.ToString();
}
return null;
}
catch (Exception ex)
{
throw ex;
}
}
}
}
在VS测试环境中,我的本地机器上的一切正常。我可能在IIS中缺少某种配置?
先谢谢。
答案 0 :(得分:4)
首先要检查IIS应用程序池标识是否具有对AD的正确权限。
另外作为旁注,这里有关于你的捕捉{throw ex}
的内容