我的公司最近从专用 T-1 更改为宽带业务 Comcast 连接。紧接着,这个问题就开始了。
我们的开发机器是本地的,但我们的 Active Directory 服务器(用于在部署之前测试和暂存产品)是位于 Rackspace 的公共云实例。开发机器未连接到域。
我们使用 ActiveDirectoryMembershipProvider 和基于表单的身份验证 - 以及身份验证完成后应用程序本身内的 LDAP 查询。
我们已经使用这个配置几个月了——没问题。
更改为康卡斯特后 - 一切似乎都正常,除了这个。当我们尝试在本地运行应用程序时,会出现上述错误。
“/Web.NEPA”应用程序中的服务器错误。
--------------------------------------------------------------------------------
配置错误描述:处理服务此请求所需的配置文件期间发生错误。请查看下面的具体错误详细信息并适当地修改您的配置文件。
解析器错误消息:无法联系指定的域或服务器。
源错误:
第 4 行:第 5 行:第 7 行:connectionStringName="LdapService" 第 8 行:attributeMapUsername="SAMAccountName"
源文件:C:\dev\EMSolution\branches\3.4.0.0\Web.NEPA\App_Config\Testing\3.4.0.0\NEPAARNG\System.Web.Membership.config 行:6
--------------------------------------------------------------------------------
版本信息:Microsoft .NET Framework 版本:2.0.50727.4952;ASP.NET 版本:2.0.50727.4955
我已经确定这不是 Rackspace 端的防火墙问题(通过完全关闭它并尝试连接)。我还创建了一个测试程序来针对我们的 AD 实例运行 LDAP 查询——效果很好。
--- 这里是一些参考的项目:
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LdapService"
attributeMapUsername="SAMAccountName"
connectionUsername="DEV1\emsutil"
connectionPassword="*****"
connectionProtection="None"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="4"
minRequiredNonalphanumericCharacters="0"
enableSearchMethods="true"/>
</providers>
</membership>
<connectionStrings>
<add name="LdapService" connectionString="LDAP://cloud1.dev1/DC=dev1" />
</connectionStrings>
--- 正常工作的测试程序:
using System;
using System.DirectoryServices;
namespace ldaptest
{
internal class Program
{
private static void Main(string[] args)
{
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://cloud1.dev1/DC=dev1";
de.Username = "emsutil@dev1";
de.Password = "*****";
DirectorySearcher srch = new DirectorySearcher(de);
srch.Filter = "(objectClass=user)";
using (SearchResultCollection results = srch.FindAll())
{
foreach (SearchResult res in results)
{
Console.WriteLine("\t{0}", res.Path);
}
}
Console.ReadKey();
}
}
}