Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit dem COM+-Dienst Queued Components können Komponenten auf einfache Weise mit Microsoft Message Queuing asynchron aufgerufen und ausgeführt werden. Die Verarbeitung kann ohne Rücksicht auf Verfügbarkeit oder Zugriffsmöglichkeit des Senders oder Empfängers erfolgen.
Dieser Dienst kann nur von Klassen verwendet werden, die direkt oder indirekt von der System.EnterpriseServices.ServicedComponent-Klasse abgeleitet wurden.
Durch die MaxListenerThreads-Eigenschaft wird die maximale Anzahl von gleichzeitigen Queued Components-Listenerthreads festgelegt. Der gültige Bereich dieses Wertes liegt zwischen 0 und 1000. Bei neueren Anwendungen wird die Anzahl aus dem Algorithmus abgeleitet, der gegenwärtig für die Ermittlung der Standardanzahl der Listenerthreads verwendet wird: 16 multipliziert mit der Anzahl der Server-CPUs. Durch diesen Wert wird nicht die Anzahl von Threads festgeschrieben, die ständig ausgeführt werden. Der Wert steht nur für die maximale Anzahl möglicher Threads. Auf einem Server im Leerlauf wird solange nur ein Thread ausgeführt, bis sich mehrere Nachrichten in der Warteschlange befinden. Dann werden vom Server so viele Threads erzeugt, bis der MaxListenerThreads-Wert erreicht ist. Im folgenden Beispiel wird der Wert für die maximale Anzahl von Queued Components-Listenerthreads auf 64 festgelegt.
**Hinweis **Die für die Marshal.BindToMoniker-Methode bereitgestellte Zeichenfolge kann optionale Parameter enthalten, die den Computernamen und sonstige Informationen angeben. Weitere Informationen finden Sie im Abschnitt zur Entwicklung von Queued Components im Platform SDK.
<ApplicationQueuingAttribute(QueueListenerEnabled := _
true, MaxListenerThreads := 64 )>
[C#]
[ApplicationQueuingAttribute(QueueListenerEnabled = true, MaxListenerThreads = 64 )]
Im folgenden zweiteiligen Beispiel wird gezeigt, wie auf dem Server eine QComponent-Klasse implementiert wird, mit der Nachrichten asynchron angezeigt werden. Zum Aufruf der DisplayMessage-Methode einer Queued Component wird ein Client verwendet.
Server
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
Public Interface IQComponent
Sub DisplayMessage(msg As String)
End Interface
<InterfaceQueuing(Interface := "IQComponent")> _
Public Class QComponent
Inherits ServicedComponent Implements IQComponent
Public Sub DisplayMessage(msg As String) implements _
IQComponent.DisplayMessage
MessageBox.Show(msg, "Processing message")
End Sub 'DisplayMessage
End Class
End Namespace
[C#]
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
{
public interface IQComponent
{
void DisplayMessage(string msg);
}
[InterfaceQueuing(Interface = "IQComponent"]
public class QComponent : ServicedComponent, IQComponent
{
public void DisplayMessage(string msg)
{
MessageBox.Show(msg, "Processing message");
}
}
}
Client
Protected Sub Send_Click(sender As Object, e As System.EventArgs) _
Handles send.Click
Dim iQc As IQComponent = Nothing
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)
End Sub 'Send_Click
[C#]
protected void Send_Click (object sender, System.EventArgs e)
{
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);
}
Siehe auch
Zusammenfassung verfügbarer COM+-Dienste | System.EnterpriseServices-Namespace