Jak PASS objekty jako parametry do COM + Queued Components

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

246627
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Souhrn
Ve frontě součásti umožňují volat funkce objektu budou zaznamenány, předán přes Microsoft Message Queue Server (MSMQ) a přehrány na serveru, kde je nakonfigurován komponenty ve frontě. V některých případech mohou obsahovat parametry funkce zaznamenávány objekty. To lze provést pomocí komponent ve frontě, ale pro mít argument objekt znovu vytvořen při volání metody je přehrát na serveru je třeba dodržovat určitá pravidla:
  • Objekt předávaný jako argument musí podporovat rozhraní IPersistStream. V aplikaci Visual Basic ji musí být označeny jako "trvalý" a musí implementovat funkce Class_ReadProperties a Class_WriteProperties správně.
  • Třída objektu předávaný jako argument musí být správně registrován v klientském počítači i v počítači serveru.
  • Nezávisle výše instance komponenty vytvořeny jako ve frontě může být předán jako parametr druhé komponenty ve frontě.
Další informace

Princip IT

Co přejde na při volání je provedené komponenty ve frontě a objekt je předáno jako argument?

Zde je příklad: Předpokládejme, že máte objekt použít ke správě informací o zákaznících nazývá Customer.CCustomer. Tento objekt je implementována v souboru Customer.dll a má následující kód. Všimněte si, že je označena jako trvalý a poznamenejte si jeho implementace příslušné metody:
'CCustomer Class. Marked as 'Persistable'Option ExplicitPublic Name As StringPublic Age As IntegerPublic Address As StringPrivate Sub Class_ReadProperties(PropBag As PropertyBag)    Name = PropBag.ReadProperty("Name")    Age = PropBag.ReadProperty("Age")    Address = PropBag.ReadProperty("Address")    MsgBox "Person read!!"End SubPrivate Sub Class_WriteProperties(PropBag As PropertyBag)    PropBag.WriteProperty "Name", Name    PropBag.WriteProperty "Age", Age    PropBag.WriteProperty "Address", Address    MsgBox "Person Written!!"End SubPrivate Sub Class_Initialize()    MsgBox "CCustomer Class_Initialize"End SubPrivate Sub Class_Terminate()    MsgBox "CCustomer Class_Terminate"End Sub				
tento ukázkový třídy neprovede žádnou akci kromě informace mezipaměti. V případě reálného světa však by pravděpodobně máte jiných metod (a žádná zpráva políček v Class_Initialize!).

Nyní si představte, že je objekt, který je určen pro použití serveru. Tento objekt volána Orders.COrder, je v samostatném souboru Orders.dll nazývá a má funkci s následujícím kódem:
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				
Poznámka: informace o odběrateli pro objednávku přímo zadaný jako objekt typu Customer.CCustomer. V reálném světě, by se pravděpodobně zapojit v některé databáze činnosti v této metodě. V tomto vzorku všechny provedete je však zvýšit zprávou.

A poslední ale není nejméně je klient aplikace EXE. Všechny nemá tento je formulář a příkazové tlačítko, ve kterém zadejte následující kód:
    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				
Say říci? nakonfigurován součást objednávky uvnitř aplikace COM +, přidání do aplikace COM +. Pokud uživatel klepne na tlačítko na klienta, se stane následující položky:
  1. CCustomer objektu je vytvořena (zvýšení CCustomer Class_Initialize zprávou) a naplněn klienta.
  2. Je vytvořen objekt COrder.
  3. Metoda AddOrder provedeny v COM + aplikace.
  4. Zobrazí se okno se zprávou oznamující "Zákazník objednávku pro položku '123 Eduardo A. Jezierski".
  5. Instance COrder zničen.
  6. Instance CCustomer zničen, uvedením nahoru zprávou CCustomer Class_Terminate.

Přenést fronty

Takže co se stane nyní přenést na Queued Components?

Tento test nejprve nakonfigurovat součást COrder jako ve frontě. Naleznete v následujícím článku znalostní báze Microsoft Knowledge Base pokyny:
246825Postup konfigurace aplikace COM + Queued Components
Dále upravit aplikace klienta tak, aby vytvořili součásti jsou ve frontě. Změňte řádek, kde je vytvořena COrder být způsobem:
Set o = GetObject("queue:/new:Orders.COrder")				
to bude efektivně umožňují objekt COrder "stand-in", bude záznam volání metody a bude jim odeslat objekt COrder sedící aplikace COM +.

Zbytek aplikace zůstane stejné. Při testování, však dochází velmi odlišnou sadu událostí:
  1. Objekt zákazníka je nejprve vytvořen a naplněn klienta.
  2. Instance COrder záznam ve frontě je vytvořena pomocí funkce GetObject s zadaný zástupný název.
  3. Vyvolat metodu AddOrder. Záznam QC pracují jako COrder, trvá v objektu zákazníka, který získá jeho Class_WriteProperties funkce volána tak, aby trvala stavu, společně s všechny ostatní parametry (ItemID a částka).
  4. Instance COrder záznam je nastavena na nic. Na tento bod všechna volání vyvolána na ni (stejně AddOrder v tomto případě) jsou baleny společně s token zabezpečení klienta a dalších informací zalomený zpráva Message Queue Server (MSMQ) a odeslán cíl.
  5. Jeho úlohu nutnosti dokončené, klient zničí instance odběratele a dokončení jeho práce.

    Meanwhile...

  6. Po odeslání zprávy předpokládají, že nakonec dosáhne fronty zamýšlené aplikace.
  7. Protože aplikace byla nastavena na "naslouchání" pro zprávy, zjistí příchodu zprávy MSMQ a hodnoty jej patří COrder třída používá uživatel X. Po provedení přístup zkontroluje vytvoří instanci COrder na serveru.
  8. Nyní začne "přehrávání" část textu. Přehrávač QC spustí vyvolání metody zapisovací uloženy ve zprávě.
  9. V tomto případě je právě metoda AddOrder. Však, protože parametry zahrnout objekt zákazníka, nejprve vytvořit instanci CCustomer a přesměrován "načtení" samotný prostřednictvím Class_ReadProperties funkce.
  10. Po načtení instance přehrávač skutečně vyvolá metodu AddOrder na skutečné COrder objektu tak, aby se jeho chores. Předává nové instance zákazníka jako argumentu volání a po dokončení volání zničí této dočasné instance. Vyvolá jakékoli jiné nahrané volání podobným způsobem a uvolní objekt COrder a dočasné instance CCustomer.
Váš kód COrder provedeny bez provádějící, že instance odběratele jej byl pomocí byl skutečně místní a jiné instance objektu zákazníka, které sám uloženy v klienta, možná minut nebo hodinami. Tímto způsobem je zachována celé asynchronní model.
Parametr objektu argument QC ve frontě trvalých MSMQ COM +

Upozornění: Tento článek byl přeložen automaticky

Vlastnosti

ID článku: 246627 - Poslední kontrola: 02/28/2014 11:48:40 - Revize: 2.7

  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • kbnosurvey kbarchive kbmt kbcomplusqc kbhowto KB246627 KbMtcs
Váš názor