[VB] Problem Zugriff auf ein Control der Server-Anwendung aus einem remotable Objekt

MartinWe

Grünschnabel
Liebe Programmier-Kollegen,

folgendes Problem stellt sich mir als VB.NET-Neuling und läßt mich fast verzweifeln, darum bitte ich ganz herzlich um Eure Unterstützung (ich verwende übrigens: VB 2005 Express Edition):

Programmarchitektur:
1. Die Server-Anwendung „Server.exe“ (Win-Form-Anwendung) besitzt die ListBox „NotifyTxt“ in die Statusmeldungen mittels der Methode „LogMessage“ der remotable Klasse „StatusCls“ ausgegeben werden sollen.
2. Die Bibliothek „Lib.dll“ definiert die Schnittstelle „IStatusCls“ welche von „StatusCls“ implementiert wird.
3. Die Client-Anwendung „Client.exe“ ruft „IStatusCls.LogMessage“ mittels „Activator.GetObject“ auf.

Problem:
Wenn innerhalb Server.exe die Methode StatusCls.LogMessage ausgeführt wird, erscheint die entsprechende Meldung in NotifyTxt (die grundlegenden Funktionen sind also korrekt).
Falls StatusCls remote (Singleton) via IStatusCls-Schnittstelle aus dem Client heraus aufgerufen wird, ist weder eine Meldungsausgabe noch eine Fehlermeldung zu beobachten.

Code-Schnipsel:
Public Sub LogMessage(ByVal MsgStr As String) _
Implements IStatusCls.LogMessage
If MainFrm.NotifyTxt.InvokeRequired Then
MsgBox("invoke required")
Else
MainFrm.NotifyTxt.Items.Add(MsgStr)
End If
End Sub
Erläuterungen:
InvokeRequired ist immer False, es liegt demzufolge kein Threading-Problem vor!

Wenn man sich im Debug-Modus MainFrm.NotifyTxt mittels Überwachung anschaut, scheint alles ok zu sein. Das Control ist instantiiert (damit natürlich auch MainFrm) und nimmt Befehle entgegen. Nach Durchführung von NotifyTxt.Items.Add erhöht sich der ListBox-Zählter um eins –> auch korrekt.

Aber, wenn das StatusCls-Objekt remote aufgerufen wird, scheint eine neue MainFrm-Instanz erzeugt zu werden, die nicht dem angezeigten MainFrm entspricht (keine UI-Interaktion möglich).

Ich habe versucht diesen Sachverhalt mittels Ausgabe des Fenster-Handles zu verifizieren:
MsgBox(MainFrm.NotifyTxt.Handle.ToString)
MsgBox(MainFrm.Handle.ToString)
und in der Tat, unterscheiden sich die Handle zwischen Direkt- und Remote-Aufruf des StatusCls-Objektes (sie bleiben dann aber stabil, auch bei mehreren Remote-Aufrufen).

Vielen Dank für Eure Unterstützung.
Gruß Martin
 

Neue Beiträge

Zurück