托管后没有获得Active Directory详细信息

时间:2014-07-04 13:07:43

标签: c# iis-7 active-directory

我编写了C#代码以从Active Directory获取电子邮件。它在我的本地系统上工作正常,但托管后我没有收到电子邮件地址。以下是我已经尝试过的事情 -

  1. 将应用程序池标识更改为NetworkService
  2. 启用Windows和摘要身份验证(同时也是一个一个)
  3. 代码:

    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "comppany.com" , "DC=compnay,DC=com", ContextOptions.Negotiate))
    // tried above and below//(ContextType.Domain, System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName))
    {
                    // validate the credentials
                    bool isValid = pc.ValidateCredentials(Uid, Pwd);
    
                    if (isValid)
                    {
                        try
                        {
                            using (UserPrincipal up = UserPrincipal.FindByIdentity(pc, Uid))
                            {
                                return up != null && !String.IsNullOrEmpty(up.EmailAddress) ? up.EmailAddress : string.Empty;
                            }
                            //return "Validate successfully.";
                        }
                        catch (Exception ex)
                        {
                            return ex.Message;
                        }
                    }
    }
    

    还试过以下 -

    using (var connection = new DirectoryEntry())
    {
          using (var search = new DirectorySearcher(connection)
          {
             Filter = "(samaccountname=" + Uid + ")",
              PropertiesToLoad = { "mail" },
           })
           {
             return (string)search.FindOne().Properties["mail"][0];
           }
    }
    

    在IIS7.0中托管应用程序后,他们都没有工作

    请帮忙。 感谢

1 个答案:

答案 0 :(得分:0)

这将是因为您的用户(即您)有权从Active Directory读取,但IIS用户和网络服务不会。

在using语句中放置一个try catch,你应该在异常中看到这个。

还有其他PrincipalContext构造函数,允许您指定要连接的用户的详细信息,或者您可以将IIS应用程序池更改为以具有权限的用户身份运行 - 但我会使用PrincipalContext方式。

作为一个快速测试尝试this版本的PrincipalContext构造函数 - 将您的用户名和密码放在用户名和密码参数中,看看它是否在IIS中托管时有效 - 如果这样做,那么你需要提出在via config中传递用户详细信息的一些方法。 (通常只有读取权限的服务帐户,其密码不会经常更改)