2016-08-08 47 views
10

Ich habe eine Methode CreateContextForGlobalCatalog, die ein PrincipalServer zurückzugibt, die zu einem globalen Katalog verbindet:Holen Sie sich den angeschlossenen Server eines Principal für globalen Katalog

PrincipalContext = new PrincipalContext(ContextType.Domain, 
             "forest.name:3268", 
             "dc=forest,dc=name", 
             ContextOptions.Negotiate, 
             userName, password); 

Hinweis: Das ist eine verkleinerte Version des Verfahrens, in der Regel der Name und der Container sind Parameter.

Mit diesem Kontext ich über Objekte aus der Datenbank bin Looping Informationen aus dem globalen Katalog in ActiveDirectory- zu erhalten:

using (PrincipalContext principalContext = CreateContextForGlobalCatalog()) 
{ 
    foreach (ADAccount adAccount in accounts){ 
     Log.Debug("Connected server: " + principalContext.ConnectedServer); 

    // get some information from AD here ... 
    } 
} 

Die Log.Debug Leitung meldet den angeschlossenen Server aus der Principal. Ich habe ein Test-Setup, das nur virtuelle Maschinen enthält.

Mein Problem: Wenn ich jetzt diesen verbundenen Server trennen (Netzwerkadapter deaktivieren) bekomme ich keine Ausnahme und werde mit einem neuen Server verbunden, aber die Protokollmeldungen zeigt immer noch den ursprünglichen verbundenen Server, obwohl der Server nicht ist verfügbar mehr.

Gibt es eine Möglichkeit, die Eigenschaft des verbundenen Servers irgendwie zu aktualisieren oder die Informationen von woanders zu bekommen?

+0

Offensichtlich müssen Sie Ihren eigenen * ChangeTracker implementieren * Schauen Sie [hier] (http://stackoverflow.com/a/2002763/4558029) und sehen Sie, ob dies hilft – lokusking

+0

Sie könnten einfach überprüfen, ob Ihr Netzwerk verbunden ist ? wie folgt: System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() –

+0

@lokusking Haha, tatsächlich mache ich viel mit Änderungsbenachrichtigungen und sie sind wirklich eine Lösung für das zugrunde liegende Problem der Synchronisierung von Objekten. Aber diesmal möchte ich nur den neuen 'ConnectedServer' bekommen. –

Antwort

2

leider Es wird nie nach Beginn aktualisiert werden, die einzige Abhilfe Sie tun können, ist mit jeder Iteration erneut zu überprüfen, wenn Sie noch angeschlossen sind oder nicht

+0

Ich bin verbunden, sonst gäbe es eine Ausnahme. Ich möchte nur wissen, mit welchem ​​Server ich verbunden bin. Aber die Schiffsladungen von Antworten auf diese Frage sehen ;-) es sieht so aus, als sei es wirklich unmöglich –

0

Die einfachste Lösung könnte sein, den Remote-Server zu versuchen und ping mit der Klasse Ping von .Net.

+0

Sorry, das löst mein Problem nicht: Wenn ich mich mit GC verbinde und der Server, mit dem ich automatisch verbunden bin, geht verloren ein anderer Server. Und ich möchte die Adresse dieses Servers wissen, aber ich bekomme nur die Adresse des ersten Servers. Entschuldigung, wenn du meine Frage falsch verstanden hast. Die Frage wurde aktualisiert. –