我的公司最近从专用的T-1变为宽带业务Comcast连接。紧接着,这个问题就开始了。
我们的开发机器是本地的,但我们的Active Directory服务器(用于在部署之前测试和暂存产品)是位于Rackspace的公共云实例。开发机器未连接到域。
我们使用ActiveDirectoryMembershipProvider和基于表单的身份验证 - 以及身份验证完成后应用程序内的LDAP查询。
我们几个月来一直在使用这种配置 - 没问题。
更改为Comcast后 - 一切似乎都正常,除此之外。当我们尝试在本地运行应用程序时,会出现上述错误。
>'/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 Line: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();
}
}
}
答案 0 :(得分:1)
之前我见过类似的问题,我认为康卡斯特可能是你问题的根源。
康卡斯特有一个名为“域名助手”的“功能”,可以截取对无效域名的请求,而是提供一个建议替代方案,显示一些广告等的页面。(基本上,它打破了DNS,以便在广告上赚几美元。)您的请求可能会受到域名帮助程序服务的干扰。虽然它通常不会从互联网上得到任何响应并回到本地网络来查找服务器,但它将从域帮助程序获得“有效”响应。当然,响应根本不是您的代码所期望的,因此会抛出异常。
有各种方法可以关闭域名助手,但最好的办法是打电话给他们。您还可以尝试查看http://dns-opt-out.comcast.net/和http://dns.comcast.net/以获取进一步的调试资源。