Pasar objetos como parámetros
El servicio de componentes en cola com+ no habilita la puesta en cola para todos los componentes COM existentes. Hay restricciones en los tipos de métodos que se pueden poner en cola. Debido a las restricciones de mensajería, los métodos deben cumplir las reglas siguientes:
- Solo deben contener parámetros de entrada.
- No deben devolver ningún resultado específico de la aplicación.
Además, hay restricciones en los tipos de parámetros de entrada que se pueden pasar a un componente en cola. En tiempo de ejecución, el servicio de componentes en cola empaqueta los argumentos en el cliente y los pasa al componente de servidor mediante Message Queuing. Los tipos simples, como enteros y booleanos, se pueden serializar fácilmente; los tipos más complejos no se pueden serializar sin ayuda.
En el caso de pasar un objeto a través de la llamada de método de un componente en cola como parámetro, el cliente pasa el objeto a la grabadora. La grabadora serializa el objeto en un mensaje message Queuing y lo pasa al agente de escucha. Una vez que el agente de escucha recoge el mensaje y lo pasa al reproductor, el jugador debe volver a crear una nueva instancia del objeto para enviarlo a la llamada de método especificada por el cliente. En función de las duraciones del cliente y el servidor en un entorno en cola, la implicación es que estos objetos deben poder serializarse por valor. Dado que COM+ no proporciona semántica de paso a valor para objetos COM estándar, la grabadora y el reproductor necesitan ayuda del componente para serializar y anular la selección del objeto.
Las referencias de objeto que admiten IPersistStream se pueden usar como parámetros para llamar a métodos en componentes en cola. El objeto no puede hacer suposiciones sobre cuándo se volverá a fundamentar. Por ejemplo, el servidor puede no estar disponible o es posible que el componente de servidor no se inicie hasta más adelante en el día. Los objetos que no admiten IPersistStream devolverán un error.
Visual Basic objetos persistentes
Microsoft Visual Basic 6 permite crear objetos persistentes. Estos objetos admiten IPersistStream y se pueden pasar como parámetros a las llamadas de método de componente en cola. Antes de que se pueda pasar un objeto Visual Basic a un componente en cola, se debe inicializar el objeto persistente. Esto se puede hacer de una de las dos maneras siguientes:
- Si la aplicación que crea el objeto persistente se escribe en Visual Basic, el tiempo de ejecución de Visual Basic controla la inicialización del objeto automáticamente.
- Si la aplicación que crea el objeto persistente Visual Basic se escribe en un lenguaje distinto de Visual Basic, como Microsoft Visual C++, la aplicación debe inicializar explícitamente el componente consultando la interfaz IPersistStream del objeto persistente o llamando a la interfaz IPersistStreamInit::InitNew del objeto persistente o llamando a la interfaz IPersistStreamInit::InitNew o Método IPersistStream::Load.
Conjuntos de registros de ADO y conjuntos de filas OLE DB
Pasar objetos recordset de ADO o conjunto de filas OLE DB entre componentes permite a un componente procesar los resultados de las consultas ejecutadas por otro componente. Esto resulta útil al implementar una aplicación en varios equipos. Los objetos Recordset y rowset se pueden pasar como parámetros de método a los componentes en cola, con las restricciones siguientes:
- Los objetos Recordset del lado servidor no se pueden serializar mediante IPersistStream. Solo los objetos Recordset del lado cliente se pueden pasar como parámetros a una llamada de método de componente en cola.
- Si trabaja directamente con OLE DB, el conjunto de filas OLE DB debe definirse como un conjunto de filas del lado cliente.