Condividi tramite


Procedura: implementare un componente in coda che consente la visualizzazione di un messaggio in modo asincrono

Esempio di codice

Il servizio Componenti in coda di COM+ consente di richiamare una classe di componenti in modo asincrono tramite il servizio di accodamento messaggi di Microsoft. Per ulteriori informazioni sui componenti in coda derivati dalla classe System.EnterpriseServices.ServicedComponent, vedere Componenti in coda.

Per implementare un componente in coda in cui viene visualizzato un messaggio in modo asincrono.

  1. Importare lo spazio dei nomi System.EnterpriseServices.

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  2. Impostare l'attributo ApplicationActivation su ActivationOption.Server; attivare il servizio di coda dell'applicazione e il listener della coda impostando l'attributo dell'assembly ApplicationQueuing, come mostrato nel codice di esempio riportato di seguito:

    <assembly: ApplicationActivation(ActivationOption.Server)>
    <assembly: ApplicationQueuing(Enabled := True, _
                QueueListenerEnabled := True)>
    
    [assembly: ApplicationActivation(ActivationOption.Server)]
    [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
    
  3. Definire un'interfaccia in coda e applicare l'attributo InterfaceQueuing all'interfaccia. Nel codice riportato di seguito, ad esempio, viene mostrato l'attributo InterfaceQueuing applicato all'interfaccia IQComponent, dotata di un unico metodo DisplayMessage.

    <InterfaceQueuing>
    Public Interface IQComponent
        Sub DisplayMessage(msg As String)
    End Interface
    
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }
    
  4. Definire una classe che deriva dalla classe System.EnterpriseServices.ServicedComponent e che implementa l'interfaccia in coda. Nell'esempio di codice riportato di seguito, ad esempio, viene dichiarata una classe denominata QComponent che deriva dalla classe System.EnterpriseServices.ServicedComponent e che implementa l'interfaccia IQComponent.

    Public Class QComponent 
        Inherits ServicedComponent Implements IQComponent 
        Public Sub DisplayMessage(msg As String) implements _
                              IQComponent.DisplayMessage
                MessageBox.Show(msg, "Processing message")
        End Sub
    End Class 
    
    public class QComponent  : ServicedComponent, IQComponent
    {
        public void DisplayMessage(string msg)
        {
            MessageBox.Show(msg, "Processing message");
        }
    }
    
  5. Creare un'applicazione client ed eseguire il test del componente in coda.

    1. Creare una variabile in cui il tipo di dati è rappresentato dall'interfaccia in coda dalla quale deriva la classe del componente in coda.

      Dim iQc As IQComponent = Nothing
      
      IQComponent iQc = null;
      
    2. Associare il moniker corrispondente all'interfaccia in coda e chiamare il metodo sul componente in coda per visualizzare il messaggio in modo asincrono. Nel codice riportato di seguito, ad esempio, viene effettuata l'associazione al componente in coda che corrisponde all'interfaccia IQComponent e viene chiamato il metodo DisplayMessage per visualizzare il messaggio in modo asincrono.

      Try
          iQc =
            CType(Marshal.BindToMoniker("queue:/new:QCDemo.QComponent"), _
                  IQComponent)
      Catch l as Exception
          Console.Writeline("Caught Exception: " & l.Message)
      End Try
      iQc.DisplayMessage(messageToSend.Text)
      Marshal.ReleaseComObject(iQc)
      
      IQComponent iQc = null;
      try
      {
          iQc = (IQComponent)
                 Marshal.BindToMoniker("queue:/new:QCDemo.QComponent");
      }
      catch
      {
          MessageBox.Show("Cannot create Queued Component");
      }
      iQc.DisplayMessage (messageToSend.Text);
      Marshal.ReleaseComObject(iQc);
      

Esempio

Imports System.Reflection
Imports System.EnterpriseServices
Imports System

<assembly: ApplicationName("QCDemoSvr")>
<assembly: ApplicationActivation(ActivationOption.Server)>
<assembly: ApplicationQueuing(Enabled := True, _
            QueueListenerEnabled := True)>
<assembly: AssemblyKeyFile("QCDemoSvr.snk")>

Namespace QCDemo
    <InterfaceQueuing>
    Public Interface IQComponent
       Sub DisplayMessage(msg As String)
    End Interface 
    
    Public Class QComponent 
    Inherits ServicedComponent Implements IQComponent 
        Public Sub DisplayMessage(msg As String) implements _
        IQComponent.DisplayMessage
            MessageBox.Show(msg, "Processing message")
        End Sub
    End Class 
End Namespace 
using System.Reflection;
using System.EnterpriseServices;

[assembly: ApplicationName("QCDemoSvr")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
[assembly: AssemblyKeyFile("QCDemoSvr.snk")]

namespace QCDemo
{
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }

    public class QComponent  : ServicedComponent, IQComponent
    {
        public void DisplayMessage(string msg)
        {
            MessageBox.Show(msg, "Processing message");
        }
    }
} 

Vedere anche

Riferimenti

System.EnterpriseServices Namespace

Concetti

Riepilogo dei servizi COM+ disponibili
Componenti in coda

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.