HOW TO:實作可以非同步顯示訊息的佇列元件
程式碼範例
COM+ 佇列元件服務提供一種方式,讓您可以使用 Microsoft Message Queuing 非同步地叫用元件類別。如需有關衍生自 System.EnterpriseServices.ServicedComponent 類別之佇列元件的詳細資訊,請參閱佇列元件。
實作可以非同步顯示訊息的佇列元件
匯入 System.EnterpriseServices 命名空間。
Imports System.EnterpriseServices
using System.EnterpriseServices;
將 ApplicationActivation 屬性設為 ActivationOption.Server;啟用應用程式佇列及佇列接聽項,方式為設定 ApplicationQueuing 組件屬性,如以下範例程式碼所示:
<assembly: ApplicationActivation(ActivationOption.Server)> <assembly: ApplicationQueuing(Enabled := True, _ QueueListenerEnabled := True)>
[assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
定義佇列介面,並將 InterfaceQueuing 屬性套用至此介面。例如,以下程式碼示範將 InterfaceQueuing 屬性套用到
IQComponent
介面,此介面具有單一方法DisplayMessage
。<InterfaceQueuing> Public Interface IQComponent Sub DisplayMessage(msg As String) End Interface
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
定義衍生自 System.EnterpriseServices.ServicedComponent 類別的類別,並實作佇列介面。例如,以下範例程式碼宣告衍生自 System.EnterpriseServices.ServicedComponent 類別且名為
QComponent
的類別,並實作IQComponent
介面。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"); } }
建立用戶端應用程式並測試佇列元件。
建立一個變數,其資料型別為佇列元件類別藉以衍生的佇列介面。
Dim iQc As IQComponent = Nothing
IQComponent iQc = null;
繫結到佇列介面的對應 Moniker,然後呼叫佇列元件的方法,以非同步方式顯示訊息。例如,以下程式碼會繫結到對應到
IQComponent
介面的佇列元件,並呼叫方法DisplayMessage
,以非同步方式顯示訊息。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);
範例
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");
}
}
}
請參閱
參考
System.EnterpriseServices Namespace
概念
Copyright © 2007 by Microsoft Corporation. All rights reserved.