Die Community zu .NET und Classic VB.
Menü

COM als Middleware - Seite 9

 von 

2.4 Persistenz
Nächste Seite >>
2.2 Instanzierung von Objekten, IClassFactory
<< Vorherige Seite

2.3 Eventfähigkeit, IConnectionPoint & IConnectionPointContainer  

Ein Event oder ein Ereignis im COM-Sinne vollzieht sich durch einen Funktionsrückruf [Callback] seitens eines Servers auf einen Client. Sämtliche COM-Komponententypen besitzen diese Fähigkeit optional durch die Bereitstellung der Standardschnittstellen IConnectionPoint und IConnectionPointContainer im Kontext ihrer CoClass. Komponenten, die diese Schnittstellen einem Client zur Verfügung stellen, sind sogenannte verbindungsfähige Objekte [Connectable Objects] und zeigen dadurch an, dass sie Nachrichten versenden können.

Die bisher besprochenen Schnittstellen sind eingangsgerichtet [aus Clientsicht: Exportschnittstellen], IConnectionPoint hingegen ist ein ausgangsgerichtetes Interface [Outgoing Interface oder aus Clientsicht: Importschnittstellen]. Die Richtung eines Interfaces ist stets kontextabhängig. Die Implementierung einer im Server enthaltenen, ausgangsgerichteten Schnittstelle findet auf dem Client statt. Der Client stellt dabei eine Senke [Sink], der Server eine Quelle [Source] dar. Ein derart ausgestatteter Server kann die so von ihm vordefinierten Methoden im Client aufzurufen und damit die Bedingung einer bidirektionalen Verbindung erfüllen. Serverschnittstellen, die IConnectionPoint implementieren, erhalten die Bezeichnung Verbindungspunkte [ConnectionPoints]. Für jede ausgangsgerichtete Schnittstelle besitzt der Server je einen Verbindungspunkt.

Der zweiten Schnittstelle, IConnectionPointContainer, fällt die Aufgabe des Verbindungshandlers zu. Über ihn kann der Client zunächst nach dem Vorhandensein eines ConnectionPoints eruieren, um bei Erfolg einen Zeiger auf IConnectionPoint zu erhalten. Die Gültigkeit einer aufgebauten Kommunikation und die damit verbundene serverseitige Nutzung signalisiert der Client, indem er die Methode IconnectionPoint::Advise aufruft. Die Methode UnAdvise widerruft dementsprechend diese Anordnung und deaktiviert die Verbindung. Der Aufruf von Advise übermittelt dem Client in dwCookie eine eindeutige Verbindungskennung zurück, über die dieser bei mehr als einem verbundenen Server später den Ereignisauslöser zweifelsfrei identifizieren kann. Unabhängig von der im Server enthaltenen Anzahl der Verbindungspunkte muss IConnectionPointContainer lediglich ein einziges mal implementiert werden. Im Weiteren gilt: Mehrere Clients dürfen den selben Verbindungspunkt eines Servers und mehrere Server dürfen einen Client als Sink verwenden. Das Konzept der Verbindungspunkte ermöglicht einem Client, ähnlich IUnknown::QueryInterface, dynamisch Verbindungspunkte während Laufzeit zu verhandeln.

Die client- und serverseitige Definition einer statischen Ereignisschnittstelle stellt zwar eine gültige sowie einfachere Alternative dar, schränkt aber die Flexibilität des Servers ein, so dass von ihr eher abzuraten ist.

Nächste Seite >>
2.4 Persistenz
<< Vorherige Seite
2.2 Instanzierung von Objekten, IClassFactory