Condividi tramite


Passaggio di oggetti come parametri

Il servizio componenti in coda COM+ non abilita l'accodamento per ogni componente COM esistente. Esistono restrizioni sui tipi di metodi che possono essere accodati. A causa dei vincoli di messaggistica, i metodi devono rispettare le regole seguenti:

  • Devono contenere solo parametri di input.
  • Non devono restituire alcun risultato specifico dell'applicazione.

Esistono inoltre restrizioni sui tipi di parametri di input che possono essere passati a un componente in coda. In fase di esecuzione, il servizio componenti in coda crea un pacchetto degli argomenti nel client e li passa al componente server usando Accodamento messaggi. I tipi semplici, ad esempio numeri interi e booleani, possono essere sottoposto a marshalling facilmente. Non è possibile effettuare il marshalling di tipi più complessi senza assistenza.

Nel caso di passaggio di un oggetto tramite una chiamata al metodo di un componente in coda come parametro, il client passa l'oggetto al registratore. Il registratore effettua il marshalling dell'oggetto in un messaggio di accodamento messaggi e lo passa al listener. Dopo che il listener preleva il messaggio e lo passa al lettore, il giocatore deve reinstantiare l'oggetto per inviarlo alla chiamata al metodo specificato dal client. In base alle durate del client e del server in un ambiente in coda, l'implicazione è che questi oggetti devono essere in grado di effettuare il marshalling per valore. Poiché COM+ non fornisce semantica pass-by-value per gli oggetti COM standard, il registratore e il lettore necessitano di aiuto dal componente per effettuare il marshalling e annullare il marshalling dell'oggetto.

I riferimenti a oggetti che supportano IPersistStream possono essere usati come parametri per le chiamate al metodo sui componenti in coda. L'oggetto non può fare ipotesi su quando verrà reintegrato. Ad esempio, il server potrebbe non essere disponibile o il componente server potrebbe non essere avviato fino a un secondo momento del giorno. Gli oggetti che non supportano IPersistStream restituiranno un errore.

Oggetti persistenti di Visual Basic

Microsoft Visual Basic 6 consente la creazione di oggetti persistenti. Questi oggetti supportano IPersistStream e possono essere passati come parametri alle chiamate al metodo del componente in coda. Prima che un oggetto Visual Basic possa essere passato a un componente in coda, è necessario inizializzare l'oggetto persistente. Questa operazione può essere eseguita in uno dei due modi seguenti:

  • Se l'applicazione che crea l'oggetto persistente viene scritta in Visual Basic, il runtime di Visual Basic gestisce automaticamente l'inizializzazione dell'oggetto.
  • Se l'applicazione che crea l'oggetto persistente di Visual Basic viene scritta in un linguaggio diverso da Visual Basic, ad esempio Microsoft Visual C++, l'applicazione deve inizializzare in modo esplicito il componente eseguendo una query sull'interfaccia IPersistStream dell'oggetto persistente o chiamando il metodo IPersistStreamInit::InitNew o IPersistStream::Load.

Recordset ADO e set di righe OLE DB

Il passaggio di oggetti recordset ADO o set di righe OLE DB tra componenti consente a un componente di elaborare i risultati delle query eseguite da un altro componente. Ciò è utile quando si distribuisce un'applicazione in più computer. Gli oggetti Recordset e set di righe possono essere passati come parametri del metodo ai componenti in coda, con le restrizioni seguenti:

  • Non è possibile effettuare il marshalling degli oggetti Recordset sul lato server tramite IPersistStream. Solo gli oggetti Recordset sul lato client possono essere passati come parametri a una chiamata al metodo del componente in coda.
  • Se si lavora direttamente con OLE DB, il set di righe OLE DB deve essere definito come set di righe lato client.