Ereignisse und Delegaten in .NET Framework-Remoting

Dieses Thema bezieht sich auf eine veraltete Technologie, die zum Zwecke der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten wird und nicht für die neue Entwicklung empfohlen wird. Verteilte Anwendungen sollten jetzt mit  Windows Communication Foundation (WCF) entwickelt werden.

Ereignisse und Delegaten können zwar in Verbindung mit .NET Framework-Remoting verwendet werden, es gibt aber zwei Hauptprobleme, die für eine erfolgreiche Verwendung behoben werden müssen. Sie sollten insbesondere nur in den Situationen genutzt werden, in denen eine Authentifizierung für IpcChannel verwendet wird.

Verwenden von Delegaten

Remotedelegaten schaffen ein Sicherheitsproblem, das behoben werden muss. Wenn ein Client einen Delagaten an einen Server übergibt (dies ist hauptsächlich dann der Fall, wenn ein Client einen Ereignishandler an ein Remoteereignis anhängt), könnte der angehängte Delegat auf eine nicht autorisierte Methode verweisen, die die gleiche Signatur aufweist wie die Methode des vorgesehenen Dienstes. Aufgrund der Übereinstimmung zwischen der nicht beabsichtigten und der beabsichtigten Methodensignatur kann der Dienst eine nicht beabsichtigte Methode selbst dann aufrufen, wenn es sich bei der Methode um eine statische Methode handelt (und sie daher für den Remoteclient nicht aufgerufen werden kann).

Um diese Situation zu umgehen, muss der Server Delegaten mit benutzerdefinierten Parametertypen definieren, und die Assembly, die diese Typen enthält, muss einen starken Namen haben. Außerdem sollten Sie eine solche Kommunikation immer authentifizieren (wenn nicht sogar verschlüsseln). Erlauben Sie niemals die Deserialisierung eines Typs auf dem Server, wenn Sie sich nicht sicher sind, ob es sich um den beabsichtigten Typ handelt.

Verwenden von Ereignissen

In Anbetracht der Sicherheitsprobleme mit Delegaten wird die Verwendung von Ereignissen nicht empfohlen. Definieren Sie stattdessen einen Client-Rückrufdienst zum Veröffentlichen von Methoden, die der Dienst aufrufen kann, wenn er mit dem Client kommunizieren muss. Wenn Sie für die Verwendung von Remoteereignissen mit authentifiziertem IpcChannel entschließen (und wie weiter oben beschrieben Delegaten deklariert haben), dürfen die Methoden der Clientereignishandler nur unidirektionale Aufrufe sein. Dies liegt daran, dass der Server die Delegaten in der Ereignisaufrufliste aufruft, wenn Ereignisse ausgelöst werden. Das Ereignissystem blockiert bei diesem Aufruf, bis der Client antwortet oder das Zeitlimit überschreitet. Daher reduzieren nicht empfangsbereite Clients den Durchsatz einfacher Elemente in erheblichen Maße, es sei denn, der Ereignishandler ist eine unidirektionale Methode.

Siehe auch

Konzepte

Sicherheit beim Remoting