4

我的公司最近从专用 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();
    }
}
}
4

1 回答 1

1

我以前见过类似的问题,我认为康卡斯特可能是你问题的根源。

Comcast 有一个名为“Domain Helper”的“功能”,它拦截对无效域名的请求,并提供一个建议替代方案、显示一些广告等的页面。(基本上,它破坏了 DNS 以赚取几美元的广告费用。)

您的请求可能会受到域助手服务的干扰。虽然它通常不会从 Internet 获得响应并回退到本地网络以查找服务器,但它会从 Domain Helper 获得“有效”响应。当然,响应根本不是您的代码所期望的,因此会引发异常。

有多种方法可以关闭域助手,但最好的办法可能是调用它们。您还可以尝试查看http://dns-opt-out.comcast.net/http://dns.comcast.net/以获取更多调试资源。

于 2011-02-15T15:27:12.993 回答