So zu COM+-Objekte als Parameter übergeben Queued Components

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 246627 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

In der Warteschlange Komponenten ermöglichen die Objekt-Funktionen aufrufen, die aufgezeichnet werden, über Microsoft Message Queue Server (MSMQ) weitergeleitet, und dann wiedergegeben, auf dem Server, die in der Warteschlange Komponente konfiguriert ist. In einigen Fällen können die Parameter der aufgezeichneten Funktionen Objekte enthalten. Sie können dies mit queued Components tun, aber Sie müssen bestimmte Regeln befolgen, um das Argument Objekt neu erstellt, wenn der Methodenaufruf auf dem Server wiedergegeben wird:
  • Das Objekt, das als Argument übergeben wird muss IPersistStream unterstützen. In Visual Basic es muss als "dauerhafte" markiert sein und die Class_ReadProperties und Class_WriteProperties-Funktion muss ordnungsgemäß implementieren.
  • Die Objektklasse als Argument übergebenen muss ordnungsgemäß auf dem Clientcomputer und dem Servercomputer registriert werden.
  • Unabhängig von den oben genannten möglicherweise eine Komponenteninstanz erstellt wie in der Warteschlange als Parameter an eine zweite Warteschlange Komponente übergeben werden.

Weitere Informationen

Funktionsweise

Was passiert auf, wenn ein Aufruf an eine Warteschlange Komponente durchgeführt wird und ein Objekt wird als Argument übergeben?

Hier ist ein Beispiel: Angenommen, Sie ein Objekt haben Sie Verwalten der Kundeninformationen Customer.CCustomer aufgerufen. Dieses Objekt wird in der Datei Customer.dll implementiert und hat den folgenden Code. Beachten Sie, dass es als dauerhafte gekennzeichnet ist, und die Implementierung der entsprechenden Methoden beachten:
'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
				
diese Beispielklasse nichts außer Informationen zwischengespeichert werden. In einem realen Szenario würde allerdings Sie wahrscheinlich andere Methoden (und keine Meldungsfelder in Class_Initialize!) verfügen.

Stellen Sie sich jetzt vor, dass ein Objekt wird, die für Server entwickelt wurde. Dieses Objekt wird Orders.COrder aufgerufen, ist in einer separaten Datei namens Orders.dll und hat eine Funktion mit dem folgenden Code:
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
				
beachten, dass die Kundeninformationen für die Bestellung direkt als ein Objekt des Typs Customer.CCustomer angegeben wird. In der Praxis würden Sie wahrscheinlich einige Datenbank-Aktivität in dieser Methode sollten. Ist jedoch in diesem Beispiel alle Sie ein Meldungsfeld auslösen.

Und zuletzt jedoch nicht mindestens besteht die Client-exe-Anwendung. Dies ist lediglich ein Formular und einer Befehlsschaltfläche in dem Sie den folgenden Code eingeben:
    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
				
sagen Sie Ihre Bestellungen Komponente innerhalb von COM+, hinzufügen zu einer COM+-Anwendung konfiguriert haben. Wenn ein Benutzer auf dem Client auf die Schaltfläche klickt, geschieht Folgendes:
  1. Ein CCustomer-Objekt erstellt (das Meldungsfeld CCustomer Class_Initialize auslösen) und vom Client aufgefüllt.
  2. Ein COrder-Objekt wird erstellt.
  3. Die Methode AddOrder wird ausgeführt, in die COM+-Anwendung.
  4. Ein Meldungsfeld, sagen "Customer Order für Artikel '123' für Eduardo a Jezierski" angezeigt wird.
  5. Die COrder-Instanz wird zerstört.
  6. Die CCustomer-Instanz wird zerstört, bis das Meldungsfeld CCustomer Class_Terminate einbinden.

Schalten Sie in den Warteschlangen

So was geschieht nun, wenn Sie auf Queued Components bringen?

Um dies zu testen, konfigurieren Sie zuerst die COrder-Komponente, wie in der Warteschlange. Finden Sie im folgenden Knowledge Base-Artikel für Anweisungen:
246825Gewusst wie: Konfigurieren einer COM+-Anwendung für Queued Components
Ändern Sie anschließend die Client-Anwendung, sodass die erstellten Komponenten in der Warteschlange befinden. Ändern Sie dazu die Zeile, in dem die COrder erstellt wird, werden wie folgt:
Set o = GetObject("queue:/new:Orders.COrder")
				
diese effektiv erhalten Sie ein "Ersatz" COrder-Objekt, der Methodenaufrufe wird aufgezeichnet und verteilen Sie das COrder-Objekt in Ihrer COM+-Anwendung.

Der Rest der Anwendung bleibt unverändert. Wenn Sie es testen, tritt jedoch ein unterschiedlichen Satz von Ereignissen:
  1. Zunächst ein Customer-Objekt erstellt und vom Client aufgefüllt.
  2. Eine COrder in der Warteschlange Recorder-Instanz wird mithilfe der GetObject-Funktion mit dem angegebenen Moniker erstellt.
  3. AddOrder-Methode wird aufgerufen. Der QC-Rekorder, verhält als eine COrder wird in das Customer-Objekt, das seine Class_WriteProperties ruft Funktion aufgerufen, sodass seinen Zustand, zusammen mit allen anderen Parametern (ItemID und Betrag beibehalten wird).
  4. Die COrder-Recorder-Instanz wird auf nothing festgelegt. An diesem Punkt werden alle zusammen mit dem Client-Sicherheitstoken und andere Informationen, die Aufrufe auf (nur auf die in diesem Fall AddOrder) aufgerufen gepackt werden in einer Microsoft Message Queue Server (MSMQ)-Nachricht eingeschlossen und Abmelden an das Ziel gesendet.
  5. Müssen beendet seine Auftrag, der Client die Debitor-Instanz zerstört und seine Arbeit beendet.

    Meanwhile...

  6. Nachdem die Nachricht gesendet wurde, wird davon ausgegangen Sie, dass es schließlich der gewünschten Anwendung Warteschlange erreicht.
  7. Da die Anwendung für die "Nachrichten abhört" festgelegt wurde, erkennt das MSMQ-Nachricht eintreffen und Werte darauf hin, dass es zu einem COrder gehört Klasse, die vom Benutzer X verwendet. Nach Access überprüft, eine Instanz COrder auf dem Server erstellt.
  8. Jetzt beginnt der "Wiedergabe" Teil der Fotostory. QC-Player startet das Aufrufen der Methoden die Aufzeichnung in der Nachricht gespeichert.
  9. In diesem Fall ist, nur die AddOrder-Methode. Allerdings da die Parameter ein Customer-Objekt enthalten, zuerst wird eine CCustomer-Instanz erstellt und es wird angewiesen, "selbst über die Class_ReadProperties geladen werden"-Funktion.
  10. Nachdem die Instanz geladen ist, ruft der Player tatsächlich die AddOrder-Methode für das eigentliche COrder-Objekt auf, wird seine Aufgaben. Er übergibt die neue Customer-Instanz als Argument Aufruf, und nachdem der Aufruf erfolgt ist, löscht es diese temporäre Instanz. Es ruft dann alle aufgezeichneten Aufrufe in ähnlicher Weise und gibt dann den temporären CCustomer-Instanzen und COrder-Objekt frei.
COrder Code ausgeführt, ohne wissen, dass die Kunden-Instanz verwendet wurde, war wirklich eine lokale und andere Instanz des Customer-Objekts, die sich selbst in der Client, vielleicht Minuten oder Stunden vor gespeichert. Auf diese Weise wird das gesamte asynchrone Modell beibehalten.

Eigenschaften

Artikel-ID: 246627 - Geändert am: Sonntag, 23. Februar 2014 - Version: 2.7
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Keywords: 
kbnosurvey kbarchive kbmt kbcomplusqc kbhowto KB246627 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 246627
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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