2016-09-13 7 views
0

問題があります:リモートサーバーからActive Directoryに接続する必要がありますが、コードはLdapConnectionクラスを使用する必要があります。私はこれが必要なのは、何らかのイベントが発生したとき(ユーザーが無効になったりグループ、データなどが変更されたときなど)、変更通知をテストできるからです。リモートサーバ上のOSは、Windows Server 2012リモートサーバーのLdapConnectionクラスを使用してActive Directoryに接続

は、私は次のコードでDirectoryServicesを使用してローカルからこれを実行するために管理されます

String ldapPath = "LDAP://XRMSERVER02.a24xrmdomain.info"; 
directoryEntry = new DirectoryEntry(ldapPath, @"A24XRMDOMAIN\username", "pass"); 

//// Search AD to see if the user already exists. 
DirectorySearcher search = new DirectorySearcher(directoryEntry); 
search.Filter = "(&(objectClass=user))"; 
SearchResult result = search.FindOne(); 

これは大丈夫と接続作品ですが、今、私はLdapConnectionを使用して接続する必要がありますクラス。

私は多くの方法でこのような何かを試してみましたが、そのどれもが私を助けていない:

LdapConnection connection = new LdapConnection(XRMSERVER02.a24xrmdomain.info); 
var credentials = new NetworkCredential(@"A24XRMDOMAIN\username", "pass");    
connection.Credential = credentials; 
connection.Bind(); 

それは、資格情報が無効であるが、それは真実ではないと言います。

説明:

  • XRMSERVER02 - ドメインコントローラ
  • a24xrmdomain.info - ドメイン
  • A24XRMDOMAIN - ドメインは、あなたの助けのための

感謝を記録するために使用。

答えて

0

username、password、domainという3つのパラメータを持つNetworkCredentialコンストラクタを使用してみてください。ユーザー名とは別にドメインを指定する

+0

ドメイン全体を監視する場合は、変更通知の使用をお勧めしません。このテクニックは、属性変更のために指定したオブジェクトまたは複数のオブジェクトを監視する必要がある場合に使用するように設計されています。負荷の高い環境では、この手法はうまくいきません。変更に関するすべての通知を受け取ることはできません(ドメインに10Kユーザーを追加し、何が起こるかを確認する)。ドメイン全体のポーリング変更には、DirSyncまたはUSN技術を使用します。 – oldovets

+0

あなたは私の質問については通知に関することを意味しましたhttp://stackoverflow.com/questions/39261263/notify-me-when-events-in-active-directory-occur-in-c-sharp ..私は通知を使用していますそのために私は他のテクニックに変更する方法がわからないので、おそらく5秒ごとにいくつかのTImerを設定してuSNChanged属性の状態を確認してください。私はオブジェクトの以前の状態を持っているので、そのように動作することができます。私は他の選択肢は何か分かりません。あなたは提供されたリンクで私の答えをチェックしてくださいできますか?ありがとう – Dan

+0

uSNChangedテクニックについては、次の手順を実行できます。1. DCに接続します。 2.このDCから現在のhighestCommitedUsnを照会します(hcusnという名前)(https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectory.domaincontroller.highestcommittedusn(v=vs.110).aspxを参照) 。 3.以前の値が必要な場合は、LDAPフィルタで(uSNChanged <= hcusn)を指定して、このDCから現在のADスナップショットを収集します。 4. hcusnをディスクに保管します。 5.同じDCに再度接続します。 6. highestCommitedUsn(hcusnnewという名前)を照会します。4. LDAPフィルターで&(uSNChanged> hcusn)(uSNChanged <= hcusnew)を指定して変更を収集します。 – oldovets

0

私は自分の問題を解決しましたが、これまでに達成したことを他の開発者と共有したいと思います。私が遭遇した問題は、OS Windows server 2012とActive Directoryを持つリモートサーバを持っていたということでした。彼のローカルマシン(Windows 10)を介して接続する必要がありました。 私は次のコードでDirectoryServicesを経由していることを行うことが可能です私の質問で述べたように:

String ldapPath = "LDAP://(DomainController).a24xrmdomain.info"; 
directoryEntry = new DirectoryEntry(ldapPath, @"DOMAIN\username","pass"); 

//// Test search on AD to see if connection works. 
DirectorySearcher search = new DirectorySearcher(directoryEntry); 
search.Filter = "(&(objectClass=user))"; 
SearchResult result = search.FindOne(); 

これは、ソリューションの1つですが、私のタスクは、通知を得るために、これまでいくつかのオブジェクトが持っていたときに同定することであったので、 Active Directoryで変更されたため、LDAPクラスを介してリモートサーバー上のActive Directoryに接続する必要がありました。私は次のコードを経由してLDAPクラスとの接続に成功しましたRegistering change notification with Active Directory using C#

から

String ldapPath2 = "(DomainController).a24xrmdomain.info"; 
LdapConnection connection = new LdapConnection(ldapPath2); 
var credentials = new NetworkCredential(@"username", "pass");    
connection.Credential = credentials; 
connection.Bind(); 

は、リモートサーバーのIPアドレスが必要とされていないことを言及したいと思い、ちょうどドメインコントローラのNotifierを取得するためのコードはから取られますそれは彼に使用され、ロギングに使用されるドメインは不要です。

ハッピーコーディング

関連する問題