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
Hat die Exception eine InnerException? Wahrscheinlich ist die RemoteException nur ein Container üfr die eigentliche Exception.
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
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.