共用方式為


HOW TO:實作可以非同步顯示訊息的佇列元件

程式碼範例

COM+ 佇列元件服務提供一種方式,讓您可以使用 Microsoft Message Queuing 非同步地叫用元件類別。如需有關衍生自 System.EnterpriseServices.ServicedComponent 類別之佇列元件的詳細資訊,請參閱佇列元件

實作可以非同步顯示訊息的佇列元件

  1. 匯入 System.EnterpriseServices 命名空間。

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  2. ApplicationActivation 屬性設為 ActivationOption.Server;啟用應用程式佇列及佇列接聽項,方式為設定 ApplicationQueuing 組件屬性,如以下範例程式碼所示:

    <assembly: ApplicationActivation(ActivationOption.Server)>
    <assembly: ApplicationQueuing(Enabled := True, _
                QueueListenerEnabled := True)>
    
    [assembly: ApplicationActivation(ActivationOption.Server)]
    [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
    
  3. 定義佇列介面,並將 InterfaceQueuing 屬性套用至此介面。例如,以下程式碼示範將 InterfaceQueuing 屬性套用到 IQComponent 介面,此介面具有單一方法 DisplayMessage

    <InterfaceQueuing>
    Public Interface IQComponent
        Sub DisplayMessage(msg As String)
    End Interface
    
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }
    
  4. 定義衍生自 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");
        }
    }
    
  5. 建立用戶端應用程式並測試佇列元件。

    1. 建立一個變數,其資料型別為佇列元件類別藉以衍生的佇列介面。

      Dim iQc As IQComponent = Nothing
      
      IQComponent iQc = null;
      
    2. 繫結到佇列介面的對應 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

概念

可用 COM+ 服務摘要
佇列元件

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.