Make VB6 COM components work with ASP.NET

Avoid big performance hits -- or outright failure -- by marking your ASP.NET pages ASP-compatible.

If your ASP.NET application uses COM components written in Visual Basic 6.0, be sure to mark the pages that use them as ASP-compatible with an @ Page directive:

<%@ Page AspCompat="true" %>

Why? Some ASP.NET pages that use ASP COM components don't run without this directive. Others do, but they will incur a measurable (and sometimes dramatic) performance hit.

Here's the reason for the performance hit. By default, threads that process ASP.NET requests reside in a COM multithreaded apartment (MTA). COM components written in VB6 -- and COM components written in any language (including C++) that are registered as ThreadingModel="Apartment" or that have no registered ThreadingModel value -- run in COM single-threaded apartments (STAs). When threads running in an MTA call objects in STAs, those calls must be marshaled across apartment boundaries. They incur thread switches as they enter an STA. AspCompat="true" forces ASP.NET threads into STAs, allowing those threads to call STA-based COM objects without marshaling or thread switches.

As a corollary, you should not use AspCompat="true" with COM components registered as ThreadingModel="Free" or ThreadingModel="Both". ASP COM components of this type are relatively rare, but they do exist. For more information and an in-depth analysis of the meaning and implications of AspCompat="true", read my "Ask the Pro" column in the March 2003 issue of asp.netPRO.

Jeff Prosise is author of several books, including "Programming Microsoft .NET" (Microsoft Press). He also is a co-founder of Wintellect, a software consulting and education firm that specializes in .NET.

This article is provided by asp.netPRO Magazine, an online information resource for the ASP.NET developer community, which helps professional software developers build, deploy and run the next generation of dynamic, distributed Web applications quickly and easily. Click here for subscription information.

This was first published in April 2003

There are Comments. Add yours.

TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.