Übergeben von Objekten als Parameter

Der COM+-Dienst für Komponenten in der Warteschlange aktiviert nicht das Warteschlangening für jede vorhandene COM-Komponente. Es gibt Einschränkungen hinsichtlich der Methodentypen, die in die Warteschlange gestellt werden können. Aufgrund von Messagingeinschränkungen müssen Methoden den folgenden Regeln entsprechen:

  • Sie dürfen nur Eingabeparameter enthalten.
  • Sie dürfen kein anwendungsspezifisches Ergebnis zurückgeben.

Darüber hinaus gelten Einschränkungen für die Typen von Eingabeparametern, die an eine Komponente in der Warteschlange übergeben werden können. Zur Laufzeit packt der Dienst für Komponenten in der Warteschlange die Argumente auf dem Client und übergibt sie mithilfe von Message Queuing. Einfache Typen wie ganze Zahlen und booleschen Werte können problemlos gemarshallt werden– komplexere Typen können nicht ohne Hilfe gemarshallt werden.

Wenn ein Objekt über den Methodenaufruf einer Warteschlangenkomponente als Parameter übergeben wird, übergibt der Client das Objekt an die Aufzeichnung. Die Aufzeichnung marshallt das -Objekt in eine Message Queuing und übergibt es an den Listener. Nachdem der Listener die Nachricht auf abruft und an den Player übergibt, muss der Player das Objekt erneut einrichten, um es an den vom Client angegebenen Methodenaufruf zu senden. Basierend auf der Lebensdauer von Client und Server in einer Umgebung in der Warteschlange besteht die Folge davon, dass diese Objekte als Wert gemarshallt werden können müssen. Da COM+ keine Pass-by-Value-Semantik für COM-Standardobjekte bietet, benötigen Aufzeichnung und Player Hilfe von der Komponente, um das Objekt zu marshallen und zu entmarshalieren.

Objektverweise, die IPersistStream unterstützen, können als Parameter für Methodenaufrufe für Komponenten in der Warteschlange verwendet werden. Das -Objekt kann keine Annahmen darüber treffen, wann es erneut initialiert wird. Beispielsweise ist der Server möglicherweise nicht verfügbar, oder die Serverkomponente wird möglicherweise erst später am Tag gestartet. Objekte, die IPersistStream nicht unterstützen, geben einen Fehler zurück.

Visual Basic Persistente Objekte

Microsoft Visual Basic 6 ermöglicht das Erstellen von persistenten Objekten. Diese Objekte unterstützen IPersistStream und können als Parameter an Methodenaufrufe von Komponenten in der Warteschlange übergeben werden. Bevor ein Visual Basic-Objekt an eine Warteschlangenkomponente übergeben werden kann, muss das persistente Objekt initialisiert werden. Dies kann auf eine der beiden folgenden Arten erfolgen:

  • Wenn die Anwendung, die das persistente Objekt erstellt, in Visual Basic geschrieben wird, verarbeitet die Visual Basic Runtime die Objektin initialisierung automatisch.
  • Wenn die Anwendung, die das persistente Visual Basic-Objekt erstellt, in einer anderen Sprache als Visual Basic geschrieben wird, z. B. Microsoft Visual C++, muss die Anwendung die Komponente explizit initialisieren, indem sie entweder die IPersistStream-Schnittstelle des persistenten Objekts abfragt oder die IPersistStreamInit::InitNew-oder IPersistStream::Load-Methode aufruft.

ADO-Recordsets und OLE DB Rowsets

Durch übergebenes ADO-Recordset oder OLE DB Rowsetobjekte zwischen Komponenten kann eine Komponente die Ergebnisse von Abfragen verarbeiten, die von einer anderen Komponente ausgeführt werden. Dies ist hilfreich, wenn Sie eine Anwendung auf mehreren Computern bereitstellen. Recordset- und Rowsetobjekte können mit den folgenden Einschränkungen als Methodenparameter an Komponenten in der Warteschlange übergeben werden:

  • Serverseitige Recordsetobjekte können nicht mit IPersistStream gemarshallt werden. Nur clientseitige Recordsetobjekte können als Parameter an einen Methodenaufruf einer Warteschlangenkomponente übergeben werden.
  • Wenn Sie direkt mit OLE DB arbeiten, OLE DB Rowset als clientseitiges Rowset definiert werden.