Поделиться через


Совместимость компонентов COM

Обновлен: Ноябрь 2007

Большинство компонентов COM будут работать с ASP.NET. Так же как и в предыдущих версиях ASP, можно выполнять вызовы с отложенной привязкой компонентов с помощью Функция CreateObject (Visual Basic). Дополнительные сведения см. в разделе COM-совместимость в приложениях .NET Framework.

В этом разделе содержатся следующие подразделы:

  • Раннее связывание

  • 64-разрядные компоненты

Раннее связывание

Несмотря на то что позднее связывание компонентов поддерживается, для повышения производительности желательно использовать раннее связывание. Средство с именем Программа импорта библиотек типов (Tlbimp.exe), которое включено в SDK (пакет средств разработки программного обеспечения) для Windows, преобразует стандартные компоненты COM в DLL-файлах в эквивалентные сборки .NET Framework с помощью привязки управляемых оболочек к компонентам. Для повышения производительности преобразованные компоненты могут быть связаны с управляемым кодом с помощью раннего связывания. Дополнительные сведения о файле Tlbimp.exe см. в разделе Предоставление клиентам .NET Framework доступа к COM-компонентам. Дополнительные сведения о преобразовании компонентов COM в управляемый код см. в разделе Построение COM-компонентов для взаимодействия.

После конвертирования компонента COM в сборку .NET Framework можно импортировать эту сборку в страницу ASP.NET, поместив соответствующую директиву в начале страницы. Например, следующая директива импортирует пространство имен MyNewNamespace, созданное с помощью файла Tlbimp.exe:

<%@Import Namespace="MyNewNamespace"%>

Файл сборки, созданный файлом Tlbimp.exe, должен быть размещен в каталоге Bin приложения ASP.NET. Оригинальный файл компонента COM должен быть зарегистрирован в каталоге, в котором он расположен.

При применении на странице ASP.NET компонентов COM, использующих однопоточное подразделение (STA), таких как компоненты, разработанные с помощью Visual Basic, необходимо включить на страницу атрибут совместимости AspCompat=true в теге <%@ Page >, как показано в следующем примере:

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

Атрибут AspCompat приводит к выполнению страницы в режиме STA. Если на странице указана ссылка на компонент STA и пропущен тег совместимости, то во время выполнения возникает исключение. Если компонент STA преобразуется в сборку с помощью файла TlbImp.exe, во время выполнения не будет обнаружено, что в компоненте используется модель STA и исключение не будет вызвано, но производительность приложения может значительно снизиться.

zwk9h2kb.alert_caution(ru-ru,VS.90).gifВажное примечание.

Компоненты COM, созданные во время разработки, выполняются перед планированием запроса в пуле потоков STA, после чего выполняются в потоках многопоточных подразделений (MTA). Это существенным образом отрицательно сказывается на производительности, поэтому такого варианта следует избегать. Если с компонентами STA используется режим AspCompat, можно создавать компоненты COM только из события Page_Load либо позже в процессе выполнения, но не во время разработки страницы.

Например, с помощью следующего объявления члена создается компонент во время разработки:

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

<script runat="server">
    // 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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page AspCompat="true" Language="VB" %>

<script runat="server">
    ' 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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

Вместо этого используйте следующий код:

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

<script runat="server">
    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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page AspCompat="true" Language="VB" %>

<script runat="server">
    ' 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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

64-разрядные компоненты

В 64-разрядной версии операционной системы Microsoft Windows имеется возможность выполнять 32-разрядные приложения с помощью эмулятора WOW64. Однако процессы могут быть либо 32-разрядными, либо 64-разрядными. Нельзя использовать процесс, который выполнялся бы в обоих режимах.

Службы IIS выполняются в качестве 64-разрядного приложения в 64-разрядной версии операционной системы Windows. Тип процесса компонента COM должен соответствовать типу рабочего процесса IIS. Имеется возможность выполнять 32-разрядные компоненты в 64-битных версиях IIS с помощью одного из следующих решений:

  • Настройте компонент COM как приложение COM+ таким образом, чтобы этот компонент выполнялся в Dllhost.exe.

  • Настройте IIS на выполнение 32-разрядных приложений. Эта опция повлияет на все приложения, которые выполняются на сервере IIS. Дополнительные сведения см. в приложении Appendix D: Running 32-bit Applications on 64-bit Windows (IIS 6.0) к разделу IIS Deployment Guide.

Рекомендуется преобразовать компоненты в 64-разрядные компоненты. Это невозможно для компонентов Visual Basic, поскольку не существует 64-разрядной версии компилятора Visual Basic.

См. также

Задачи

Практическое руководство. Обновление разрешений для существующих компонентов MTS в ASP.NET

Основные понятия

Предоставление клиентам .NET Framework доступа к COM-компонентам

Построение COM-компонентов для взаимодействия

Общие папки кода на веб-узлах ASP.NET