다음을 통해 공유


서비스 구성 요소 예제

다음 예제는 클라이언트와 서버 두 부분으로 구성된 서비스 구성 요소입니다. 이 예제에서 Account 클래스는 Account 개체의 컨텍스트가 COM+에서 호스팅되도록 ServicedComponent 클래스에서 파생됩니다. 이 예제에서는 다음 특성이 적용됩니다.

  • TransactionAttribute Account 클래스에 적용하여 트랜잭션을 Required로 설정합니다. 이 작업은 Windows 제어판에서 사용 가능한 구성 요소 서비스 관리 도구를 사용하여 COM+ 구성 요소에 대한 트랜잭션 지원을 설정하는 것과 같습니다.

  • AutoCompleteAttribute Post 메서드에 적용됩니다. 이 특성은 메서드를 실행하는 동안 처리되지 않은 예외가 생성되면 런타임에서 해당 트랜잭션에 대해 SetAbort 함수를 자동으로 호출할 수 있습니다. 그렇지 않은 경우 런타임에서는 SetComplete 함수를 호출합니다.

이 예제에 사용된 특성 외에도 COM+ 등록 정보를 제공하는 데 다양한 어셈블리 수준 특성을 사용합니다. 서비스 구성 요소는 강력한 이름이어야 하며 수동 등록을 위해 GAC(전역 어셈블리 캐시)에 있어야 합니다. 어셈블리에 대한 자세한 내용은 강력한 이름의 어셈블리를 참조하십시오.

Note참고:

GAC에 있는 어셈블리는 동적 등록을 사용할 수 없습니다. 서버 응용 프로그램을 만드는 경우 서버 응용 프로그램을 사용하기 전에 Windows Installer를 사용하여 해당 서버 응용 프로그램이 종속되는 어셈블리 및 모든 어셈블리를 GAC에 추가해야 합니다. 그렇지 않으면 응용 프로그램은 예외를 생성합니다.

BankComponent 서버

Imports System.EnterpriseServices
Imports System.Runtime.CompilerServices
Imports System.Reflection

' Supply the COM+ application name. 
<assembly: ApplicationName("BankComponent")>
' Supply a strong-named assembly.
<assembly: AssemblyKeyFileAttribute("BankComponent.snk")>

Namespace BankComponent
      <Transaction(TransactionOption.Required)> _
      Public Class Account 
Inherits ServicedComponent
            <AutoComplete()> _
            Public Sub  Post(accountNum As Integer, amount As Double)
                  ' Updates the database; no need to call SetComplete.
                  ' Calls SetComplete automatically if no exception is generated.
            End Sub 
      End Class 
End Namespace 
using System.EnterpriseServices;
using System.Runtime.CompilerServices;
using System.Reflection;

// Supply the COM+ application name.
[assembly: ApplicationName("BankComponent")]
// Supply a strong-named assembly.
[assembly: AssemblyKeyFileAttribute("BankComponent.snk")]

namespace BankComponent
{
      [Transaction(TransactionOption.Required)]
      public class Account : ServicedComponent
      {
            [AutoComplete] 
            public bool Post(int accountNum, double amount)
            {
                /* Updates the database; no need to call SetComplete.
                   Calls SetComplete automatically if no exception is
                   generated. */
            return false;     
            } 
      }
}

BankComponent 클라이언트

Imports BankComponent
Public Class Client 
   Shared Sub Main()
      Dim Account As New Account()
      ' Post money into the account. 
      Account.Post(5, 100)
   End Sub
End Class
using BankComponent;
namespace BankComponentConsoleClient
{
      class Client
      {
            public static int Main() 
            {
                  try
                  {
                        Account act = new Account();
                        // Post money into the account.
                        act.Post(5, 100);
                        return(0);
                  }
                  catch
                  {
                        return(1);
                  }
            }
      }
}

Makefile.bat

서버 및 클라이언트를 다음과 같이 컴파일할 수 있습니다.

sn –k BankComponent.snk
vbc /t:library /r:System.EnterpriseServices.dll Bank.vb
vbc /r:Bank.dll /r:System.EnterpriseServices.dll BankClient.vb
sn –k BankComponent.snk
csc /t:library /r:System.EnterpriseServices.dll Bank.cs
csc /r:Bank.dll BankClient.cs

참고 항목

작업

방법: 서비스 구성 요소 만들기

참조

ServicedComponent
System.EnterpriseServices Namespace

개념

서비스 구성 요소 개요
특성을 적용하여 COM+ 서비스 구성
서비스 구성 요소 등록
사용 가능한 COM+ 서비스 요약

기타 리소스

서비스 구성 요소 작성

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.