다음을 통해 공유


COM 구성 요소 호환성

업데이트: 2007년 11월

대부분의 COM 구성 요소를 ASP.NET에서 사용할 수 있습니다. 이전 버전의 ASP(Active Server Pages)와 마찬가지로 CreateObject 함수(Visual Basic)를 사용하여 런타임 바인딩 방식으로 구성 요소를 호출할 수 있습니다. 자세한 내용은 .NET Framework 응용 프로그램의 COM 상호 운용성을 참조하십시오.

이 항목에는 다음과 같은 단원이 포함되어 있습니다.

  • 초기 바인딩

  • 64비트 구성 요소

초기 바인딩

런타임에 구성 요소를 바인딩하는 방식이 계속 지원되지만 성능 면에서는 초기에 바인딩을 하는 것이 좋습니다. Windows SDK(소프트웨어 개발 키트)에 포함된 형식 라이브러리 가져오기(Tlbimp.exe)란 도구는 구성 요소와 관련된 관리되는 래퍼를 작성하여 .dll 파일의 표준 COM 구성 요소를 이와 동등한 .NET Framework 어셈블리로 변환합니다. 변환된 구성 요소는 성능 향상을 위해 관리 코드에 초기 바인딩될 수 있습니다. Tlbimp.exe에 대한 자세한 내용은 .NET Framework에 COM 구성 요소 노출을 참조하십시오. COM 구성 요소를 관리 코드로 변환하는 데 대한 내용은 상호 운용을 위한 COM 구성 요소 빌드를 참조하십시오.

COM 구성 요소를 .NET Framework 어셈블리로 변환한 후에는 페이지의 맨 위에 지시문을 추가하여 이 어셈블리를 ASP.NET 페이지로 가져올 수 있습니다. 예를 들어, 다음 지시문은 Tlbimp.exe에 의해 만들어진 네임스페이스 MyNewNamespace를 가져옵니다.

<%@Import Namespace="MyNewNamespace"%>

Tlbimp.exe를 통해 생성된 어셈블리 파일은 ASP.NET 응용 프로그램의 Bin 디렉터리에 포함되어야 합니다. 원본 COM 구성 요소 파일은 현재 위치의 디렉터리에 등록되어야 합니다.

ASP.NET 페이지에서 STA(단일 스레드 아파트) COM 구성 요소(예: Visual Basic을 사용하여 개발한 구성 요소)를 사용 중인 경우에는 다음 예제와 같이 ASP.NET 페이지의 <%@ Page > 태그에 호환성 특성 AspCompat=true를 포함해야 합니다.

<%@Page AspCompat=true Language = VB%>

AspCompat 특성을 설정하면 페이지가 STA 모드에서 실행됩니다. STA 구성 요소가 페이지에서 참조되고 호환성 태그가 생략되면 런타임에서는 예외를 throw합니다. Tlbimp.exe를 사용하여 STA 구성 요소를 어셈블리로 변환하면 런타임에서 구성 요소에 STA 모델이 사용됨을 감지하지 못하여 예외를 throw하지 않습니다. 그러나 응용 프로그램 성능이 저하될 수 있습니다.

중요:

생성할 때 만들어진 COM 구성 요소는 요청이 STA 스레드 풀에 예약되기 전에 실행되므로 MTA(다중 스레드 아파트) 스레드에서 실행됩니다. 이런 상황은 성능에 상당히 부정적인 영향을 미치므로 피해야 합니다. STA 구성 요소에 AspCompat를 사용하는 경우에는 페이지를 생성할 때가 아니라 Page_Load 이벤트에서 또는 나중에 실행 체인을 통해서만 COM 구성 요소를 만들어야 합니다.

예를 들어, 다음의 멤버 선언은 생성할 때 구성 요소를 만듭니다.

<%@ Page AspCompat="true" Language="C#" %>

<script >
    // The components is created at construction time.
    MyComObject comObj = new MyComObject();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        // The object is first used here.
        comObj.DoSomething();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page AspCompat="true" Language="VB" %>

<script >
    ' The components is created at construction time.
    Dim comObj As MyComObject = New MyComObject()
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        ' The object is first used here.
        comObj.DoSomething()
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>

대신 다음과 같은 코드를 사용하십시오.

<%@ Page AspCompat="true" Language="C#" %>

<script >
    protected void Page_Load(object sender, EventArgs e)
    {
        // The component is created and used after the code is running 
        // on the STA thread pool.
        MyComObject comObj = new MyComObject();
        comObj.DoSomething();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page AspCompat="true" Language="VB" %>

<script >
    ' The component is created and used after the code is running 
    ' on the STA thread pool.
    Dim comObj As MyComObject = New MyComObject()
    comObj.DoSomething()
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>

64비트 구성 요소

64비트 버전의 Microsoft Windows에서는 WOW64 에뮬레이터를 사용하여 32비트 응용 프로그램을 실행할 수 있습니다. 그러나 프로세스는 32비트 또는 64비트만 가능합니다. 32비트와 64비트를 둘 다 실행하는 프로세스는 사용할 수 없습니다.

IIS(인터넷 정보 서비스)는 64비트 버전의 Windows에서 64비트 응용 프로그램으로 실행됩니다. COM 구성 요소의 프로세스 유형은 IIS 작업자 프로세스 유형과 일치해야 합니다. 다음 방법 중 하나를 사용하면 64비트 버전의 IIS에서 32비트 구성 요소를 실행할 수 있습니다.

구성 요소를 64비트 버전으로 변환하는 것이 좋습니다. 그러나 Visual Basic 구성 요소의 경우에는 64비트 버전의 Visual Basic 컴파일러가 없으므로 변환할 수 없습니다.

참고 항목

작업

방법: ASP.NET에서 기존 MTS 구성 요소의 사용 권한 업데이트

개념

.NET Framework에 COM 구성 요소 노출

상호 운용을 위한 COM 구성 요소 빌드

ASP.NET 웹 사이트의 공유 코드 폴더