方法 :非同期でメッセージを表示するキュー コンポーネントを実装する
コード例
COM+ のキュー コンポーネント サービスでは、Microsoft メッセージ キューを使用して非同期でコンポーネント クラスを呼び出すことができます。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 属性をインターフェイスに適用します。たとえば、次のコードでは、単一メソッドの
DisplayMessage
があるIQComponent
インターフェイスに適用されている InterfaceQueuing 属性を示します。<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;
キュー インターフェイスに対応するモニカにバインドし、キュー コンポーネントのメソッドを呼び出し、メッセージを非同期に表示します。たとえば、次にコードでは、
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+ サービスの概要
キュー コンポーネント
Copyright © 2007 by Microsoft Corporation.All rights reserved.