방법: 메시지를 비동기로 표시하는 대기 중인 구성 요소 구현
코드 예제
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 특성을 적용합니다. 예를 들어, 다음 코드에서는 하나의
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 클래스에서 파생되고
IQComponent
인터페이스를 구현하는QComponent
클래스를 선언합니다.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.