Совместимость компонентов 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 и исключение не будет вызвано, но производительность приложения может значительно снизиться.
Важное примечание. |
---|
Компоненты 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-компонентам