Ошибка с Directory.Services при работе - PullRequest
0 голосов
/ 27 сентября 2011

Следующий код прекрасно работает в среде разработки Visual Studio на моей локальной машине.Однако когда я перемещаю файлы на компьютер с Windows 2008 R2 IIS 7.5, я получаю следующую ошибку:

[DirectoryServicesCOMException (0x80072020): Произошла ошибка операций.] _Default.c: \ AuthTest \ Default.aspx.cs: 23
System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Объект o, Объект t, EventArgs e) +25 System.Web.UI.Control.LoadRecursive ()+71 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 3064

У меня включена проверка подлинности Windows в IIS, поэтому я не уверен, что что-то упустил.И мой локальный компьютер, и веб-сервер находятся в одном домене.

Вот мой код:

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 Testing.Возможно, мне не хватает какой-то конфигурации в IIS?

Заранее спасибо.

1 Ответ

4 голосов
/ 27 сентября 2011

Прежде всего следует убедиться, что удостоверение пула приложений IIS имеет правильные разрешения для AD.

Также в качестве дополнительного примечания здесь есть что почитать относительно вашего улова {throw ex}

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

...