Componentes em fila como passar objectos como parâmetros para COM +

Traduções de Artigos Traduções de Artigos
Artigo: 246627 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Colocar em fila componentes permitem chamar funções de objecto que serão gravadas, reencaminhados através do Microsoft Message Queue Server (MSMQ) e, em seguida, reproduzidos no servidor onde o componente em fila está configurado. Em alguns casos, os parâmetros de funções ser gravados podem incluir objectos. Pode fazê-lo com componentes em fila, mas tem de seguir certas regras para que o objecto de argumento recriado quando a chamada de método é reproduzida no servidor:
  • O objecto a ser transmitido como um argumento tem de suportar IPersistStream. No Visual Basic, este tem de ser marcado como "persistente" e tem de implementar correctamente as funções Class_ReadProperties e Class_WriteProperties.
  • A classe de objecto a ser transmitida como um argumento tem de estar correctamente registada no computador cliente e o computador servidor.
  • Independentemente acima, uma instância de componente criada como em fila pode ser transmitida como um parâmetro para um segundo componente em fila.

Mais Informação

Como funciona

Que se passa quando é efectuada uma chamada para um componente em fila e é transmitido um objecto como um argumento?

Eis um exemplo: suponha que tem um objecto utiliza para gerir informações de cliente denominadas Customer.CCustomer. Este objecto é implementado no ficheiro Customer.dll e tem o seguinte código. Tenha em atenção que está marcado como persistente e anote a implementação de métodos apropriados:
'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
				
esta classe de exemplo não faz nada excepto informações em cache. Num cenário mundo real, no entanto, provavelmente terá outros métodos (e não caixas de mensagens em Class_Initialize!).

Agora imagine que existe um objecto concebido para utilização do servidor. Este objecto é designado por Orders.COrder, é num ficheiro separado denominado Orders.dll e tem uma função com o seguinte código:
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
				
tenha em atenção que as informações de cliente para a encomenda directamente são especificadas como um objecto do tipo Customer.CCustomer. No mundo real, provavelmente iria entram em algumas actividades de base de dados neste método. No entanto, neste exemplo tudo o que fazer é aumentar uma caixa de mensagem.

E última mas não menos, existe o cliente EXE aplicação. Tudo isto é um formulário e um botão de comando em que escreva o seguinte código:
    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 tiver configurado o componente de encomendas dentro do COM +, adicionar a uma aplicação do COM +. Quando um utilizador clica no botão no cliente, acontece o seguinte:
  1. Um objecto CCustomer é criado (aumentar a caixa de mensagem CCustomer Class_Initialize ) e preenchido pelo cliente.
  2. É criado um objecto COrder.
  3. O método AddOrder é executado no COM + aplicação.
  4. É apresentada uma caixa de mensagem indicando "Ordem de cliente para o item '123' para Eduardo r. Jezierski".
  5. A instância COrder é destruída.
  6. A instância CCustomer é destruída, colocar a caixa de mensagem CCustomer Class_Terminate .

Aproximar as filas

O assim que acontece agora se colocar nos componentes em fila de espera?

Para testar esta situação, configure primeiro o componente COrder como em fila. Consulte o seguinte artigo da base de dados de conhecimento da Microsoft para obter instruções:
246825Como configurar uma aplicação do COM + para componentes em fila de espera
Em seguida, modifique a aplicação de cliente para que os componentes criados são colocados em fila. Para o fazer, altere a linha onde o COrder é criado para ser da seguinte forma:
Set o = GetObject("queue:/new:Orders.COrder")
				
isto eficazmente fornecerá um objecto de COrder "stand-in" que regista as chamadas de método e envio-los para o objecto COrder sentado na sua aplicação COM +.

O restante da aplicação permanece a mesma. Quando o testar, no entanto, um conjunto muito diferente de eventos ocorre:
  1. Em primeiro lugar, um objecto de cliente é criado e preenchido pelo cliente.
  2. É criada uma instância de gravação em fila COrder utilizando a função GetObject com o moniker especificado.
  3. O método AddOrder é invocado. O Gravador QC, funcionar como um COrder, coloca o objecto de cliente, que obtém o Class_WriteProperties função chamada para que o estado é persistente, juntamente com todos os outros parâmetros (ItemID e valor).
  4. A instância do gravador de COrder está definida como nada. Nesta altura, todas as chamadas invocadas nele (apenas o AddOrder neste caso) são compactadas juntamente com o token de segurança do cliente e outras informações moldado numa mensagem Microsoft Message Queue Server (MSMQ) e enviado para o destino.
  5. O cliente ter terminado a tarefa, destrói a ocorrência de cliente e termina o trabalho.

    Meanwhile...

  6. Depois da mensagem é enviada, suponha que eventualmente atingir fila da aplicação pretendida.
  7. Uma vez que a aplicação foi definida para "escutar" para mensagens, que detecta a chegada de mensagens MSMQ e calcula que pertence a um COrder classe utilizado pelo utilizador X . Depois de acesso de verificações, que cria uma instância de COrder no servidor.
  8. Agora parte do bloco "reprodução" começa. O QC jogador começa chamar os métodos gravador armazenado na mensagem.
  9. Neste caso, que é apenas o método AddOrder. No entanto, uma vez que os parâmetros incluem um objecto de cliente, primeiro é criada uma instância CCustomer e é direccionado "carregar-se" através do Class_ReadProperties função.
  10. Depois da instância é carregada, o leitor realmente invoca o método AddOrder no objecto COrder real, para que faz os trabalhos. Transmitir a nova instância de cliente como o argumento de chamada e, depois de terminar a chamada, destrói nesta instância temporária. Em seguida, invoca outras chamadas registadas de forma semelhante e, em seguida, liberta o objecto de COrder e instâncias CCustomer temporárias.
O código de COrder executado sem que concretizam que a instância de cliente estava a utilizar foi realmente uma instância de local e é diferente do objecto cliente que armazenados próprio no cliente, talvez minutos ou horas atrás. Desta forma, o modelo de inteiros assíncrono é mantido.

Propriedades

Artigo: 246627 - Última revisão: 24 de fevereiro de 2014 - Revisão: 2.7
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbnosurvey kbarchive kbmt kbcomplusqc kbhowto KB246627 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 246627

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