none
Aus der MSDN-Hotline: Objekte (Listen) in Anwendungs-Domänen RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:

    Ich verwende AppDomain.DoCallBack um über Domänengrenzen hinweg zu kommunizieren. In meiner Default-Domäne verwalte ich eine Liste, die in den neu erzeugten Domänen aber immer leer erscheint (List.Count = 0). Leert mein Programm die Liste, wenn ich eine neue Domäne erzeuge?

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:

    Nein. Ihre Liste ist nach wie vor befüllt (also in dem Zustand, in dem sie sein sollte). Sobald Sie mit System.AppDomain.CreateDomain eine neue Domäne erzeugen, wird der Kontext kopiert. Vereinfacht gesagt: für die neue Domäne werden Kopien aller benötigten Objekte erstellt.
    Möchte man stattdessen in beiden Domänen auf dem selben Objekt arbeiten, muss man das Übergeben von Referenzen ermöglichen. Das wird mit der Klasse MarshalByRefObject bewerkstelligt. Erbt man von dieser Klasse, wie in den Beispielen hier, so können die Referenzen auf diese Objekte auch von anderen Domänen aus verwendet werden. MarshalByRefObject agiert als Proxy.

    In diesem Fall würde man die Klasse, welche die Liste enthält beispielsweise so definieren:

    public class MyClass : MarshalByRefObject {
     public List<Object> MyList;
    }
    
    

    Bitte beachten Sie die Hinweise zu Anwendungsdomänen, vor allem den dritten Punkt: "Der in einer Anwendung ausgeführte Code kann nicht direkt auf Code oder Ressourcen anderer Anwendungen zugreifen. Zwischen Domänen übergebene Objekte werden kopiert, oder der Zugriff erfolgt über einen Proxy. Wenn das Objekt kopiert wird, erfolgen die Aufrufe des Objekts lokal. Das heißt, dass der Aufrufer und das Objekt, auf das verwiesen wird, zur gleichen Anwendungsdomäne gehören." Eben das war hier der Fall.

    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Jonathan Best
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.

    Dienstag, 17. August 2010 11:18