クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Visual Studio ドキュメント
.NET Framework の拡張開発
 方法 : 非同期でメッセージを表示するキュー コンポーネントを実装する

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.Net Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
.NET Framework 開発者ガイド
方法 : 非同期でメッセージを表示するキュー コンポーネントを実装する

コード例

COM+ のキュー コンポーネント サービスでは、Microsoft メッセージ キューを使用して、コンポーネント クラスを非同期に呼び出すことができます。System.EnterpriseServices.ServicedComponent クラスから派生したキュー コンポーネントの詳細については、「キュー コンポーネント」を参照してください。

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

  1. System.EnterpriseServices 名前空間をインポートします。

    Visual Basic
    Imports System.EnterpriseServices
    

    C#
    using System.EnterpriseServices;
    
  2. 次のコード例に示すように、ApplicationActivation 属性を ActivationOption.Server に設定し、ApplicationQueuing アセンブリ属性を設定してアプリケーション キューとキュー リスナを有効にします。

    Visual Basic
    <assembly: ApplicationActivation(ActivationOption.Server)>
    <assembly: ApplicationQueuing(Enabled := True, _
                QueueListenerEnabled := True)>
    

    C#
    [assembly: ApplicationActivation(ActivationOption.Server)]
    [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
    
  3. キュー インターフェイスを定義し、インターフェイスに InterfaceQueuing 属性を適用します。たとえば、DisplayMessage という単一のメソッドがある IQComponent インターフェイスに InterfaceQueuing 属性を適用する方法を次のコード例に示します。

    Visual Basic
    <InterfaceQueuing>
    Public Interface IQComponent
        Sub DisplayMessage(msg As String)
    End Interface
    

    C#
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }
    
  4. System.EnterpriseServices.ServicedComponent クラスから派生するクラスを定義し、キュー インターフェイスを実装します。たとえば、次のコード例は、System.EnterpriseServices.ServicedComponent クラスから派生した QComponent という名前のクラスを宣言し、IQComponent インターフェイスを実装します。

    Visual Basic
    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 
    

    C#
    public class QComponent  : ServicedComponent, IQComponent
    {
        public void DisplayMessage(string msg)
        {
            MessageBox.Show(msg, "Processing message");
        }
    }
    
  5. クライアント アプリケーションを作成し、キュー コンポーネントをテストします。

    1. データ型がキュー インターフェイス (キュー コンポーネント クラスの派生元) である変数を作成します。

      Visual Basic
      Dim iQc As IQComponent = Nothing
      

      C#
      IQComponent iQc = null;
      
    2. キュー インターフェイスに対応するモニカにバインドし、メソッドをキュー コンポーネントで呼び出してメッセージを非同期で表示します。たとえば、次のコードは、IQComponent インターフェイスに対応するキュー コンポーネントにバインドし、DisplayMessage メソッドを呼び出してメッセージを非同期で表示します。

      Visual Basic
      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)
      

      C#
      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);
      

使用例

Visual Basic
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 
C#
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");
        }
    }
} 

参照

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker