Componenti in coda come passare oggetti come parametri a COM +

Traduzione articoli Traduzione articoli
Identificativo articolo: 246627 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato archiviato. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Componenti consentono di richiamare le funzioni di oggetto che verranno registrate, inoltrato tramite Microsoft Message Queue Server (MSMQ) e quindi riprodotti nel server in cui il componente in coda Ŕ configurato in coda. In alcuni casi, Ŕ possono che i parametri delle funzioni in corso la registrazione di includono gli oggetti. Procedere con i componenti in coda, ma Ŕ necessario eseguire determinate regole affinchÚ l'oggetto argomento ricreato quando la chiamata al metodo viene riprodotto sul server:
  • L'oggetto viene passato come argomento non supporta IPersistStream. In Visual Basic, Ŕ necessario deve essere contrassegnata come "persistente" e deve implementare le funzioni Class_ReadProperties e Class_WriteProperties correttamente.
  • La classe oggetto viene passata come argomento deve essere registrata correttamente nel computer il client e il computer server.
  • Indipendentemente dalla precedente, un'istanza del componente creata come in coda pu˛ essere passata come parametro a un secondo componente in coda.

Informazioni

Come funziona

Ci˛ che entra in quando viene effettuata una chiamata a un componente in coda e un oggetto viene passato come argomento?

Ecco un esempio: si supponga che si dispone di un oggetto che consente di gestire informazioni sui clienti chiamati Customer.CCustomer. Questo oggetto Ŕ implementato nel file Customer.dll e ha il codice riportato di seguito. Si noti che Ŕ contrassegnato come persistente e osservare l'implementazione di metodi appropriati:
'CCustomer Class. Marked as 'Persistable'
Option Explicit

Public Name As String
Public Age As Integer
Public Address As String

Private Sub Class_ReadProperties(PropBag As PropertyBag)
    Name = PropBag.ReadProperty("Name")
    Age = PropBag.ReadProperty("Age")
    Address = PropBag.ReadProperty("Address")
    MsgBox "Person read!!"
End Sub

Private Sub Class_WriteProperties(PropBag As PropertyBag)
    PropBag.WriteProperty "Name", Name
    PropBag.WriteProperty "Age", Age
    PropBag.WriteProperty "Address", Address
    MsgBox "Person Written!!"
End Sub

Private Sub Class_Initialize()
    MsgBox "CCustomer Class_Initialize"
End Sub

Private Sub Class_Terminate()
    MsgBox "CCustomer Class_Terminate"
End Sub
				
questa classe di esempio non tranne nella cache le informazioni. In uno scenario reale, tuttavia, sarÓ probabilmente necessario altri metodi (e senza finestre di messaggio in Class_Initialize!).

Si supponga ora che Ŕ presente un oggetto che Ŕ progettato per l'utilizzo di server. Questo oggetto viene chiamato Orders.COrder, si trova in un file distinto denominato Orders.dll e dispone di una funzione con il codice riportato di seguito:
Public Sub AddOrder(ByVal ItemID As Long, ByVal Amount As Double, ByVal Customer As Customer.CCustomer)
    
    MsgBox "Customer order for item '" & ItemID & "' for " & Customer.Name
    
End Sub
				
notare che le informazioni sul cliente per l'ordine direttamente Ŕ specificati come un oggetto di tipo Customer.CCustomer. Nel mondo reale, sarebbe probabilmente partecipa a un'attivitÓ di database in questo metodo. Tuttavia, in questo esempio Ŕ sufficiente Ŕ di generare una finestra di messaggio.

E ultimo ma non meno importante, non vi Ŕ il client applicazione EXE. Tutto questo Ŕ un modulo e un pulsante di comando in cui si digita il codice riportato di seguito:
    Dim oOrder As COrder
    
    Dim oCust As CCustomer
    Set oCust = New CCustomer
    oCust.Name = "Eduardo A. Jezierski"
    oCust.Age = 23
    oCust.Address = "One Microsoft Way, Redmond, WA"
    
    Set oOrder = New COrder    
    oOrder.AddOrder 123, 100, oCust
    Set oOrder = Nothing
    
    Set oCust = Nothing
				
dire di aver configurato il componente di ordini all'interno di COM +, aggiungerlo a un'applicazione COM +. Quando un utente fa clic sul pulsante sul client, si verifica quanto segue:
  1. Un oggetto di CCustomer viene creato (generazione di finestra di messaggio CCustomer Class_Initialize ) e popolato con il client.
  2. Viene creato un oggetto COrder.
  3. Il metodo di AddOrder viene eseguito in COM + dell'applicazione.
  4. VerrÓ visualizzata una finestra di messaggio che indica "Ordine cliente per l'articolo '123' per Eduardo r. Jezierski".
  5. L'istanza COrder viene distrutta.
  6. L'istanza CCustomer viene eliminato, portare la finestra di messaggio CCustomer Class_Terminate .

Inserire le code

Pertanto, cosa succede ora se Ŕ possibile portare in componenti in coda?

Per eseguire questo test, Ŕ necessario configurare il componente COrder come accodata. Vedere il seguente articolo della Microsoft Knowledge Base per istruzioni:
246825How to: configurazione di un'applicazione COM + per componenti in coda
Consente di modificare successivamente, l'applicazione client in modo che i componenti creati vengono accodati. Per effettuare questa operazione, modificare la riga in cui il COrder viene creato come indicato di seguito:
Set o = GetObject("queue:/new:Orders.COrder")
				
questo efficace fornirÓ un oggetto COrder "sostituto" registrerÓ le chiamate al metodo e verrÓ inviato all'oggetto COrder nell'applicazione.

Il resto dell'applicazione rimane invariata. Durante il testing, tuttavia, si verifica un insieme molto diverso di eventi:
  1. Innanzitutto un oggetto del cliente viene creato e popolato con il client.
  2. Un'istanza di Registratore in coda COrder viene creata utilizzando la funzione di GetObject con il moniker specificato.
  3. Il metodo AddOrder viene richiamato. Il registratore QC, funziona come un COrder accetta l'oggetto utente, che ottiene il Class_WriteProperties chiamata di funzione in modo che lo stato viene mantenuto, con tutti gli altri parametri (ItemID e Importo).
  4. L'istanza di Registratore di COrder Ŕ impostata su nothing. A questo punto, tutte le chiamate su di esso (solo il AddOrder in questo caso) vengono compressi con il token di protezione del client e altre informazioni, incluso in un messaggio Message Queue Server (MSMQ) e inviato alla destinazione.
  5. Avere completato il processo, il client elimina l'istanza di cliente e al termine del proprio lavoro.

    Nel frattempo in corso...

  6. Una volta inviato il messaggio, Ŕ possibile presupporre che raggiunge infine coda dell'applicazione desiderata.
  7. PoichÚ l'applicazione Ŕ stata impostata per il "ascolto" dei messaggi, che rileva l'arrivo del messaggio MSMQ e figura che appartiene a un COrder classe utilizzata dall'utente X . Dopo aver eseguito accesso controlli, crea un'istanza di COrder sul server.
  8. Ora inizia la parte di "riproduzione" del brano. Il lettore QC avvia richiamare i metodi il registratore memorizzato nel messaggio.
  9. In questo caso, che Ŕ semplicemente il metodo di AddOrder. Tuttavia, poichÚ i parametri includono un oggetto Customer, viene dapprima creata un'istanza CCustomer e fa riferimento a "carico" stesso tramite il Class_ReadProperties funzione.
  10. Una volta caricato l'istanza, il lettore richiama effettivamente il metodo AddOrder sull'oggetto COrder reale, in modo che non le attivitÓ. La nuova istanza Customer passarlo come argomento di chiamata e al termine della chiamata, Elimina questa istanza temporanea. Viene quindi richiama altre chiamate registrate in modo simile e quindi si rilascia l'oggetto COrder e di un temporanee CCustomer istanze.
Il codice COrder eseguito senza sapere che l'istanza del cliente che Ŕ stato utilizzato fosse effettivamente un'istanza dell'oggetto cliente che stesso memorizzati nel client, forse minuti o ore fa in locale e diversa. In questo modo, il modello di completamente asincrona viene mantenuto.

ProprietÓ

Identificativo articolo: 246627 - Ultima modifica: lunedý 24 febbraio 2014 - Revisione: 2.7
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Chiavi:á
kbnosurvey kbarchive kbmt kbcomplusqc kbhowto KB246627 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 246627
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com