我正在尝试创建一个简单的网站来更改我的AD密码。该网站将在我的IIS内部托管。
以下是我的用户界面的样子:
单击提交按钮后,我收到此错误(我使用asp.net标签显示):
System.Runtime.InteropServices.COMException (0x8007203A): The server is not operational.
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.FindOne()
at changep1.changep.ChangeMyPassword(String domainName, String userName, String currentPassword, String newPassword)
这是我的代码:
using System.DirectoryServices;
protected void btncp_Click(object sender, EventArgs e)
{
string result = "";
string username = txtuser.Text;
string oldpass = txtoldpass.Text;
string newpass2 = txtpassnew2.Text;
string dn = "Sales-comm";
result =ChangeMyPassword(dn, username, oldpass , newpass2);
lblresult.Text = result;
}
public string ChangeMyPassword(string domainName, string userName, string currentPassword, string newPassword)
{
string resultinner="";
try
{
string ldapPath = "LDAP://commonspace.Sales-comm.local/CN=admin,CN=Accounts and Services,DC=Sales-comm,DC=local";
DirectoryEntry directionEntry = new DirectoryEntry(ldapPath, domainName + "\\" + userName, currentPassword);
if (directionEntry != null)
{
DirectorySearcher search = new DirectorySearcher(directionEntry);
search.Filter = "(SAMAccountName=" + userName + ")";
SearchResult result = search.FindOne();
if (result != null)
{
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("ChangePassword", new object[] { currentPassword, newPassword });
userEntry.CommitChanges();
}
}
}
}
catch (Exception ex)
{
resultinner= ex.ToString();
}
return resultinner;
}
我检查了一些类似于我的Stack Overflow问题,并相应地更改了LDAP路径,但我仍然无法解决这个问题。有谁知道什么是错的?
答案 0 :(得分:0)
这意味着它无法与域控制器联系。所以你必须做一些诊断。
执行DNS查找并确保您有结果:
nslookup commonspace.Sales-comm.local
尝试连接各种LDAP端口。我使用telnet客户端:
telnet commonspace.Sales-comm.local 389
这些是您可以使用的端口:
LDAP:389 全球目录:3268 LDAP over SSL:646 SSL全球目录:3269
如果您发现3268已打开,则可以使用GC://
进行绑定:
string ldapPath = "GC://commonspace.Sales-comm.local/CN=admin,CN=Accounts and Services,DC=Sales-comm,DC=local";
如果其中一个SSL端口已打开,则您需要使用LDAP://
但包含端口号:
string ldapPath = "LDAP://commonspace.Sales-comm.local:646/CN=admin,CN=Accounts and Services,DC=Sales-comm,DC=local";
如果您使用SSL,则可能必须确保在您连接的计算机上信任所使用的根证书。