Comment faire pour passer des objets en tant que paramètres vers COM + Queued Components

Traductions disponibles Traductions disponibles
Numéro d'article: 246627 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Résumé

Composants vous permettent d'appeler des fonctions d'objet seront enregistrées, transmis via Microsoft Message Queue Server (MSMQ) et relus puis sur le serveur où le composant en file d'attente est configuré dans la file d'attente. Dans certains cas, les paramètres des fonctions en cours d'enregistrement peuvent inclure des objets. Vous pouvez le faire avec les composants en file d'attente, mais vous devez suivre certaines règles pour que l'objet argument recréé lorsque l'appel de méthode est lu sur le serveur :
  • L'objet est transmis en tant qu'argument doit prendre en charge IPersistStream. Dans Visual Basic, elle doit être marquée comme « permanent et doit implémenter les fonctions Class_ReadProperties et Class_WriteProperties correctement.
  • La classe d'objet est transmise en tant qu'argument doit être correctement enregistrée sur l'ordinateur client et l'ordinateur serveur.
  • Indépendamment des éléments ci-dessus, une instance du composant créée comme mis en file d'attente peut être passée comme un paramètre à un deuxième composant en file d'attente.

Plus d'informations

Fonctionnement

Ce qui se passe en lorsqu'un appel est effectué à un composant en file d'attente, et un objet est transmis en tant qu'argument ?

Voici un exemple : supposons que vous disposez d'un objet permet de gérer les informations client appelées Customer.CCustomer. Cet objet est implémenté dans le fichier Customer.dll et possède le code suivant. Notez qu'il est marqué comme permanent, puis notez son implémentation des méthodes appropriés :
'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
				
Fin Sub Private Sub Class_Initialize() MsgBox "Class_Initialize CCustomer" End Sub Private Sub Class_Terminate() MsgBox "Class_Terminate CCustomer" End Sub Cette exemple de classe ne fait rien à l'exception du cache d'informations. Dans un scénario réel, cependant, vous devez avez probablement autres méthodes (et sans boîtes de message dans Class_Initialize!).

Imaginez maintenant qu'il est un objet est conçu pour une utilisation du serveur. Cet objet est appelé Orders.COrder, se trouve dans un fichier distinct appelé Orders.dll et a une fonction avec le code suivant :
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
				
Notez que les informations client pour la commande sont spécifiées directement en tant qu'objet de type Customer.CCustomer. Dans le monde réel, vous devez probablement participer une activité de base de données dans cette méthode. Toutefois, dans cet exemple il vous suffit est générer une boîte de message.

Et dernière mais non des moindres, il est le client application EXÉCUTABLE. Tout ceci a est d'un formulaire et un bouton de commande dans laquelle vous tapez le code suivant :
    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 vous avez configuré votre composant de commandes à l'intérieur de COM +, ajoutant à une application COM +. Lorsqu'un utilisateur clique sur le bouton sur le client, celui-ci se produit :
  1. Un objet CCustomer est créé (déclencher la boîte de message CCustomer Class_Initialize ) et remplie par le client.
  2. Un objet COrder est créé.
  3. La méthode AddOrder est exécutée dans le COM + applications.
  4. Une boîte de message disant « commande client pour l'article « 123 » pour Eduardo a Jezierski » s'affiche.
  5. L'instance COrder est détruit.
  6. L'instance CCustomer est détruite, afficher la boîte de message CCustomer Class_Terminate .

Importer les files d'attente

Ainsi, que se passe-t-il maintenant si vous remettez en composants en file d'attente ?

Pour tester cela, configurez tout d'abord votre composant COrder comme mis en file d'attente. Consultez l'article suivant de base de connaissances Microsoft pour obtenir des instructions :
246825 Comment faire pour Configuration d'une application COM + pour Queued Components
Ensuite, modifier l'application cliente de sorte que les composants créés sont mis en file d'attente. Pour ce faire, modifiez la ligne où le COrder est créé comme suit :
Set o = GetObject("queue:/new:Orders.COrder")
				
il efficacement vous donnera un objet de COrder « stand-in » qui enregistre les appels de méthode et les distribuer à l'objet COrder trouve dans votre application COM +.

Le reste de l'application reste identique. Lorsque vous testez il, toutefois s'un ensemble très différent d'événements produit :
  1. Tout d'abord, un objet client est créé et remplie par le client.
  2. Une instance d'enregistreur de file d'attente de COrder est créée utilisant la fonction GetObject avec le nom spécifié.
  3. La méthode AddOrder est appelée. L'enregistreur QC, comportement comme un COrder prend de l'objet client, qui obtient sa Class_WriteProperties fonction appelée afin que son état est persistant, avec tous les autres paramètres (ItemID et montant).
  4. L'instance d'enregistreur de COrder est définie sur nothing. À ce stade, tous les appels appelés sur celui-ci (uniquement le AddOrder dans ce cas) sont compressés avec le jeton de sécurité client et autres informations, encapsulé dans un message Message Queue Server (MSMQ) et envoyé hors vers la destination.
  5. Avoir terminé son travail, le client détruit l'instance de client et termine son travail.

    Meanwhile...

  6. Une fois le message est envoyé, vous supposer qu'il atteigne finalement file d'attente prévu de l'application.
  7. Étant donné que l'application a été définie sur écouter les messages, il détecte l'arrivée de messages MSMQ et chiffres qu'il appartient à un COrder classe utilisée par l'utilisateur X . Après avoir effectué l'accès chèques, il crée une instance COrder sur le serveur.
  8. Maintenant "Lecture" commence la partie de l'article. Le lecteur QC démarre appel les méthodes de l'enregistrement stocké dans le message.
  9. Dans ce cas, qui est simplement la méthode AddOrder. Toutefois, parce que les paramètres incluent un objet client, tout d'abord une instance CCustomer est créée et qu'il est dirigé vers « charger » lui-même via le Class_ReadProperties fonction.
  10. Une fois l'instance est chargée, le lecteur appelle en fait la méthode AddOrder de l'objet COrder réel, afin que c'est ses tâches. Elle transmet la nouvelle instance de client en tant qu'argument appel, l'appel de fait, il détruit cette instance temporaire. Il appelle ensuite les autres appels enregistrées de manière similaire et puis le relâche les COrder objet et les instances CCustomer temporaires.
Votre code COrder exécuté sans réaliser que l'instance client qu'il utilisait était réellement une instance locale et différente de l'objet client lui-même stockées dans le client, peut-être minutes ou dans heures il y a. De cette manière, le modèle entier asynchrone est conservé.

Propriétés

Numéro d'article: 246627 - Dernière mise à jour: dimanche 23 février 2014 - Version: 2.7
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Mots-clés : 
kbnosurvey kbarchive kbmt kbcomplusqc kbhowto KB246627 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 246627
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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