Laden...

Fehlerbehandlung bei .NET Remoting

Erstellt von Edi_2k vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.554 Views
E
Edi_2k Themenstarter:in
10 Beiträge seit 2006
vor 16 Jahren
Fehlerbehandlung bei .NET Remoting

Hallo.

Ich habe einen Datenbankserver inkl. Client programmiert, beides in C# und mit Hilfe von .NET Remoting.

Eine Fehlerbehandlung sieht bei mir beispielsweise so auf dem Server aus:

Marshal.ThrowExceptionForHR((int)E_FAIL);

Ich werde desshalb einen HRESULT aus, da ich zuvor den Server als c++ Anwendung auf COM-Basis hatte und den Sourcecode des Clients nur an einigen wenigen Stellen dafür ändern musste.

Auf dem Client sieht die Fehlerbehandlung dann entsprechend aus, da der throw am Server eigentlich eine COMExeption hervorruft.


catch(COMException  e)
{
	// Fehlermeldungen im Log-Fenster ausgeben
        ...
}

Seltsamerweise wirft der Server zwar die COMExeption aus, jedoch kommt am Client nur eine RemotingExeption an.

Kann sich das jemand erklären?

Danke

40 Beiträge seit 2007
vor 16 Jahren

Hat die Exception eine InnerException? Wahrscheinlich ist die RemoteException nur ein Container üfr die eigentliche Exception.

E
Edi_2k Themenstarter:in
10 Beiträge seit 2006
vor 16 Jahren

hallo.

nein, die RemotingExeption hat keine InnerExeption.
wenn ich in einer MessageBox den Fehler ausgebe erscheint:

"Im Server ist ein interner Fehler aufgetreten. Aktivieren Sie in der Serverkonfigurationsdatei den customErrors-Modus, um weitere Informationen zu erhalten."

gruß
edi

3.728 Beiträge seit 2005
vor 16 Jahren
Entfernte Ausnahmen

Den CustomError-Modus kannst entweder über die App.config oder über die RemotingConfiguration-Klasse setzen. Hier ein Visual Studio 2005 Hilfe-Link zum Thema:
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.de/cpref11/html/P_System_Runtime_Remoting_RemotingConfiguration_CustomErrorsMode.htm

Außerdem muss die Ausnahmenklasse serialisierbar sein, damit sie zum Client übertragen werden kann (Das muss so sein, da Speicherzeiger auf andere Computer via TCP/IP logischerweise nicht funktionieren). Möglicherweise musst Du eine eigene serialisierbare Ausnahmenklasse schreiben und den HRESULT dort reinpacken.