다음을 통해 공유


방법: 메시지를 비동기로 표시하는 대기 중인 구성 요소 구현

코드 예제

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 특성을 적용합니다. 예를 들어, 다음 코드에서는 하나의 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 클래스에서 파생되고 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");
        }
    }
    
  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.