次の方法で共有


方法 :非同期でメッセージを表示するキュー コンポーネントを実装する

コード例

COM+ のキュー コンポーネント サービスでは、Microsoft メッセージ キューを使用して非同期でコンポーネント クラスを呼び出すことができます。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 属性をインターフェイスに適用します。たとえば、次のコードでは、単一メソッドの DisplayMessage がある IQComponent インターフェイスに適用されている InterfaceQueuing 属性を示します。

    <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. キュー インターフェイスに対応するモニカにバインドし、キュー コンポーネントのメソッドを呼び出し、メッセージを非同期に表示します。たとえば、次にコードでは、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.