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
Importieren Sie den System.EnterpriseServices-Namespace.
Imports System.EnterpriseServices
using System.EnterpriseServices;
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)]
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 MethodeDisplayMessage
enthält.<InterfaceQueuing> Public Interface IQComponent Sub DisplayMessage(msg As String) End Interface
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
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 dieIQComponent
-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"); } }
Erstellen Sie eine Clientanwendung, und testen Sie die Queued Component.
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;
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 MethodeDisplayMessage
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
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.