서비스 구성 요소 예제
다음 예제는 클라이언트와 서버 두 부분으로 구성된 서비스 구성 요소입니다. 이 예제에서 Account
클래스는 Account
개체의 컨텍스트가 COM+에서 호스팅되도록 ServicedComponent 클래스에서 파생됩니다. 이 예제에서는 다음 특성이 적용됩니다.
TransactionAttribute
Account
클래스에 적용하여 트랜잭션을 Required로 설정합니다. 이 작업은 Windows 제어판에서 사용 가능한 구성 요소 서비스 관리 도구를 사용하여 COM+ 구성 요소에 대한 트랜잭션 지원을 설정하는 것과 같습니다.AutoCompleteAttribute Post 메서드에 적용됩니다. 이 특성은 메서드를 실행하는 동안 처리되지 않은 예외가 생성되면 런타임에서 해당 트랜잭션에 대해 SetAbort 함수를 자동으로 호출할 수 있습니다. 그렇지 않은 경우 런타임에서는 SetComplete 함수를 호출합니다.
이 예제에 사용된 특성 외에도 COM+ 등록 정보를 제공하는 데 다양한 어셈블리 수준 특성을 사용합니다. 서비스 구성 요소는 강력한 이름이어야 하며 수동 등록을 위해 GAC(전역 어셈블리 캐시)에 있어야 합니다. 어셈블리에 대한 자세한 내용은 강력한 이름의 어셈블리를 참조하십시오.
참고: |
---|
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+ 서비스 요약
기타 리소스
Copyright © 2007 by Microsoft Corporation. All rights reserved.