existe example active c# asp.net active-directory directoryservices

c# - example - Error con Directory.Services durante la producción



system.directoryservices nuget (1)

El siguiente código funciona bien en el entorno de desarrollo Visual Studio en mi máquina local. Sin embargo, cuando muevo los archivos a una máquina IIS 7.5 con Windows 2008 R2, aparece el siguiente error:

[DirectoryServicesCOMException (0x80072020): se produjo un error de operaciones. ] _Default.GetFullName (String strLoginName, String y STR_FIRST_NAME, String y STR_LAST_NAME, String y STR_DISPLAY_NAME, String y STR_MAIL, String y STR_OFFICE_PHONE, String y STR_ADDRESS) en c: / AuthTest / Default.aspx.cs: 87 _Default.Page_Load (Object Sender, EventArgs e) en 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 (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064

Tengo la Autenticación de Windows habilitada en IIS, por lo que no estoy seguro de si me falta algo más. Tanto mi máquina local como el servidor web están en el mismo dominio.

Aquí está mi código:

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; } } } }

De nuevo, todo funciona bien en mi máquina local en el entorno de prueba VS. Probablemente me falta algún tipo de configuración en IIS?

Gracias por adelantado.


Lo primero sería verificar que la identidad del grupo de aplicaciones IIS tenga los permisos correctos para AD.

También como nota al margen aquí hay algo para leer con respecto a su captura {throw ex}

http://www.tkachenko.com/blog/archives/000352.html