我正在尝试修复产品中SSL的错误,并注意到尽管代码将SSL设置为true,但在代码的下一行SSL仍为false。我为此编写了一个单元测试,该单元测试证实了我的怀疑。

  [TestMethod]
  public void SecureSocketLayerSetToTrue( )
  {
     var ldapConnection = new LdapConnection(
                                new LdapDirectoryIdentifier( "ldap.test.com", 636 ));
     ldapConnection.SessionOptions.SecureSocketLayer = true;
     Assert.IsTrue( ldapConnection.SessionOptions.SecureSocketLayer );
  }

测试失败。这里有我想念的东西吗?

最佳答案

事实证明,DirectoryServices.Protocols实现其LDAP调用的方式是将它们传递给低级LDAP API。当对该属性进行获取时,将查询此LDAP API。

仅在执行方法时才更新低级API。您可以考虑一下,就像它为尚未启动的可执行文件构建命令行参数一样。

进行诸如Bind()之类的调用时,将启动可执行文件,并且属性将报告正确的值。

因此,仅因为该属性在说值是假的,它在必要时才使用true。

09-16 03:21