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.
Importare lo spazio dei nomi System.EnterpriseServices.
Imports System.EnterpriseServices
using System.EnterpriseServices;
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)]
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 metodoDisplayMessage
.<InterfaceQueuing> Public Interface IQComponent Sub DisplayMessage(msg As String) End Interface
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
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'interfacciaIQComponent
.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"); } }
Creare un'applicazione client ed eseguire il test del componente in coda.
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;
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 metodoDisplayMessage
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
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.