Verfahrensweise: Implementieren einer Queued Component, die eine Nachricht asynchron anzeigt

Codebeispiel

Der COM+ Queued Components-Dienst bietet eine Möglichkeit zum asynchronen Aufrufen einer Komponentenklasse mithilfe von Microsoft Message Queuing. Weitere Informationen zu Queued Components, die von der System.EnterpriseServices.ServicedComponent-Klasse abgeleitet werden, finden Sie unter Queued Components.

So implementieren Sie eine Queued Component, die eine Meldung asynchron anzeigt

  1. Importieren Sie den System.EnterpriseServices-Namespace.

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  2. Legen Sie das ApplicationActivation-Attribut auf ActivationOption.Server fest, und aktivieren Sie Anwendungswarteschlangen sowie den Queue Listener, indem Sie das ApplicationQueuing-Assemblyattribut wie im folgenden Beispielcode gezeigt festlegen:

    <assembly: ApplicationActivation(ActivationOption.Server)>
    <assembly: ApplicationQueuing(Enabled := True, _
                QueueListenerEnabled := True)>
    
    [assembly: ApplicationActivation(ActivationOption.Server)]
    [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
    
  3. Definieren Sie eine Schnittstelle mit Warteschlange, und wenden Sie das InterfaceQueuing-Attribut auf die Schnittstelle an. Im folgenden Code wird beispielsweise gezeigt, wie das InterfaceQueuing-Attribut auf die IQComponent-Schnittstelle angewendet wird, die nur eine einzige Methode DisplayMessage enthält.

    <InterfaceQueuing>
    Public Interface IQComponent
        Sub DisplayMessage(msg As String)
    End Interface
    
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }
    
  4. Definieren Sie eine Klasse, die von der System.EnterpriseServices.ServicedComponent-Klasse abgeleitet wird und die Schnittstelle mit Warteschlange implementiert. Im folgenden Beispielcode wird beispielsweise eine Klasse namens QComponent deklariert, die von der System.EnterpriseServices.ServicedComponent-Klasse abgeleitet wird und die IQComponent-Schnittstelle implementiert.

    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. Erstellen Sie eine Clientanwendung, und testen Sie die Queued Component.

    1. Erstellen Sie eine Variable, deren Datentyp die Schnittstelle mit Warteschlange ist, von der die Queued Component-Klasse abgeleitet wird.

      Dim iQc As IQComponent = Nothing
      
      IQComponent iQc = null;
      
    2. Binden Sie an den Moniker, der der Schnittstelle mit Warteschlange entspricht, und rufen Sie die Methode für die Queued Component auf, um die Meldung asynchron anzuzeigen. Im folgenden Code wird beispielsweise an die Queued Component gebunden, die der IQComponent-Schnittstelle entspricht, und die Methode DisplayMessage wird aufgerufen, um eine Meldung asynchron anzuzeigen.

      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);
      

Beispiel

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");
        }
    }
} 

Siehe auch

Referenz

System.EnterpriseServices Namespace

Konzepte

Zusammenfassung der verfügbaren COM+-Dienste
Queued Components

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.