Procédure d'implémentation d'un Queued Component qui affiche un message de façon asynchrone
Exemple de code
Le service COM+ Queued Components permet à une classe de composants d'être invoquée de façon asynchrone à l'aide de Microsoft Message Queuing. Pour plus d'informations sur les composants mis en file d'attente et dérivés de la classe System.EnterpriseServices.ServicedComponent, voir la rubrique sur Queued Components.
Pour implémenter un composant mis en file d'attente qui affiche un message de façon asynchrone
Importez l'espace de noms System.EnterpriseServices.
Imports System.EnterpriseServices
using System.EnterpriseServices;
Affectez à l'attribut ApplicationActivation la valeur ActivationOption.Server, puis activez la mise en file d'attente d'application et l'écouteur de file d'attente en définissant l'attribut d'assembly ApplicationQueuing comme illustré dans l'exemple de code suivant :
<assembly: ApplicationActivation(ActivationOption.Server)> <assembly: ApplicationQueuing(Enabled := True, _ QueueListenerEnabled := True)>
[assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
Définissez une interface mise en file d'attente et appliquez l'attribut InterfaceQueuing à l'interface. Par exemple, le code suivant montre l'attribut InterfaceQueuing appliqué à l'interface
IQComponent
qui contient une seule méthodeDisplayMessage
.<InterfaceQueuing> Public Interface IQComponent Sub DisplayMessage(msg As String) End Interface
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
Définissez une classe qui dérive de la classe System.EnterpriseServices.ServicedComponent et qui implémente l'interface mise en file d'attente. Par exemple, l'exemple de code suivant permet de déclarer une classe nommée
QComponent
qui dérive de la classe System.EnterpriseServices.ServicedComponent et qui implémente l'interfaceIQComponent
.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"); } }
Créez une application cliente et testez le composant mis en file d'attente.
Créez une variable dont le type de données est l'interface mise en file d'attente à partir de laquelle est dérivée la classe du composant mis en file d'attente.
Dim iQc As IQComponent = Nothing
IQComponent iQc = null;
Effectuez une liaison au moniker correspondant à l'interface mise en file d'attente et appelez la méthode sur le composant mis en file d'attente pour afficher le message de façon asynchrone. Par exemple, le code suivant permet d'effectuer une liaison au composant mis en file d'attente qui correspond à l'interface
IQComponent
et permet d'appeler la méthodeDisplayMessage
pour afficher un message de façon asynchrone.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);
Exemple
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");
}
}
}
Voir aussi
Référence
System.EnterpriseServices Namespace
Concepts
Résumé des services COM+ disponibles
Queued Components
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.