Passage d’objets en tant que paramètres
Le service composants en file d’attente COM+ n’active pas la mise en file d’attente pour chaque composant COM existant. Il existe des restrictions sur les types de méthodes qui peuvent être mis en file d’attente. En raison des contraintes de messagerie, les méthodes doivent respecter les règles suivantes :
- Ils doivent contenir uniquement des paramètres d’entrée.
- Ils ne doivent retourner aucun résultat spécifique à l’application.
En outre, il existe des restrictions sur les types de paramètres d’entrée qui peuvent être passés à un composant mis en file d’attente. Au moment de l’exécution, le service des composants mis en file d’attente empaquette les arguments au niveau du client et les transmet au composant serveur à l’aide de Message Queuing. Les types simples, tels que les entiers et les booléens, peuvent être marshalés facilement. Les types plus complexes ne peuvent pas être marshalés sans aide.
En cas de passage d’un objet via l’appel de méthode d’un composant mis en file d’attente en tant que paramètre, le client transmet l’objet à l’enregistreur. L’enregistreur marshale l’objet dans un message Message Queuing et le transmet à l’écouteur. Une fois que l’écouteur a récupéré le message et l’a transmis au joueur, le joueur doit rétablir l’objet pour le distribuer à l’appel de méthode spécifié par le client. En fonction des durées de vie du client et du serveur dans un environnement mis en file d’attente, l’implication est que ces objets doivent être en mesure de marshaler par valeur. Étant donné que COM+ ne fournit pas de sémantique pass-by-value pour les objets COM standard, l’enregistreur et le lecteur ont besoin de l’aide du composant pour marshaler et démarshaler l’objet.
Les références d’objet qui prennent en charge IPersistStream peuvent être utilisées comme paramètres pour les appels de méthode sur les composants mis en file d’attente. L’objet ne peut pas faire d’hypothèses sur le moment où il sera réinstancié. Par exemple, le serveur peut être indisponible ou le composant serveur peut ne pas être démarré avant plus tard dans la journée. Les objets qui ne prennent pas en charge IPersistStream retournent une erreur.
Objets persistants Visual Basic
Microsoft Visual Basic 6 permet de créer des objets persistants. Ces objets prennent en charge IPersistStream et peuvent être passés en tant que paramètres aux appels de méthode de composant mis en file d’attente. Avant qu’un objet Visual Basic puisse être passé à un composant mis en file d’attente, l’objet persistant doit être initialisé. Vous pouvez procéder de l’une des deux manières suivantes :
- Si l’application qui crée l’objet persistant est écrite en Visual Basic, le runtime Visual Basic gère automatiquement l’initialisation de l’objet.
- Si l’application qui crée l’objet persistant Visual Basic est écrite dans un langage autre que Visual Basic, tel que Microsoft Visual C++, l’application doit initialiser explicitement le composant en interrogeant l’interface IPersistStream de l’objet persistant ou en appelant la méthode IPersistStreamInit::InitNew ou IPersistStream::Load.
Jeux d’enregistrements ADO et ensembles de lignes OLE DB
Le passage d’objets d’ensemble de lignes ADO Recordset ou OLE DB entre des composants permet à un composant de traiter les résultats des requêtes exécutées par un autre composant. Cela est utile lors du déploiement d’une application sur plusieurs ordinateurs. Les objets Recordset et rowset peuvent être passés en tant que paramètres de méthode aux composants mis en file d’attente, avec les restrictions suivantes :
- Les objets Recordset côté serveur ne peuvent pas être marshalés à l’aide d’IPersistStream. Seuls les objets Recordset côté client peuvent être passés en tant que paramètres à un appel de méthode de composant mis en file d’attente.
- Si vous travaillez directement avec OLE DB, l’ensemble de lignes OLE DB doit être défini comme un ensemble de lignes côté client.