473,437 Members | 1,773 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,437 software developers and data experts.

STA and MTA

Hi,
We have a dozens of VB6 components, developed some 5 years before, we
have now few .Net components which references these files. Ideally we are
using Biztalk server and referencing these VB6 components into that, what
happens is that during actual transaction with several instances, the
process(biztalk)
gets automatically shutdown.

on researching the problem it was found that all VB6 compentes were STA and
so when loaded into memory it caused a deadlock problem. The solun ideally is
to convert all the vb6 componets to .net components, but as of now this is
practically impossible.

can any one suggests an alternate method so that the process goes with MTA
instead of STA or atleast any ways to minimise the deadlock condition?
Nov 17 '05 #1
8 3616

"Venkat" <Ve****@discussions.microsoft.com> wrote in message
news:71**********************************@microsof t.com...
Hi,
We have a dozens of VB6 components, developed some 5 years before, we
have now few .Net components which references these files. Ideally we are
using Biztalk server and referencing these VB6 components into that, what
happens is that during actual transaction with several instances, the
process(biztalk)
gets automatically shutdown.

on researching the problem it was found that all VB6 compentes were STA
and
so when loaded into memory it caused a deadlock problem. The solun ideally
is
to convert all the vb6 componets to .net components, but as of now this is
practically impossible.

can any one suggests an alternate method so that the process goes with MTA
instead of STA or atleast any ways to minimise the deadlock condition?


Simple solution is to create/access instances of those COM objects on/from a
STA threads, that is initialize your threads as STA by setting the
ApartmentState to STA before starting the thread.

Willy.
Nov 17 '05 #2
Hi Willy,

Maybe as a MVP you would know this...
Do you know why the pages at MSDN which discribes STA and MTA are
disappiring ?

--
best regards
stic

Nov 17 '05 #3
I didnot understand, can you be more specific with an example?

venkat.

"Willy Denoyette [MVP]" wrote:

"Venkat" <Ve****@discussions.microsoft.com> wrote in message
news:71**********************************@microsof t.com...
Hi,
We have a dozens of VB6 components, developed some 5 years before, we
have now few .Net components which references these files. Ideally we are
using Biztalk server and referencing these VB6 components into that, what
happens is that during actual transaction with several instances, the
process(biztalk)
gets automatically shutdown.

on researching the problem it was found that all VB6 compentes were STA
and
so when loaded into memory it caused a deadlock problem. The solun ideally
is
to convert all the vb6 componets to .net components, but as of now this is
practically impossible.

can any one suggests an alternate method so that the process goes with MTA
instead of STA or atleast any ways to minimise the deadlock condition?


Simple solution is to create/access instances of those COM objects on/from a
STA threads, that is initialize your threads as STA by setting the
ApartmentState to STA before starting the thread.

Willy.

Nov 17 '05 #4
how will it solve the problem if i change like that? any technical articles /
proofs, substantiating your view?

pLS..
VENKAT.

"Willy Denoyette [MVP]" wrote:

"Venkat" <Ve****@discussions.microsoft.com> wrote in message
news:71**********************************@microsof t.com...
Hi,
We have a dozens of VB6 components, developed some 5 years before, we
have now few .Net components which references these files. Ideally we are
using Biztalk server and referencing these VB6 components into that, what
happens is that during actual transaction with several instances, the
process(biztalk)
gets automatically shutdown.

on researching the problem it was found that all VB6 compentes were STA
and
so when loaded into memory it caused a deadlock problem. The solun ideally
is
to convert all the vb6 componets to .net components, but as of now this is
practically impossible.

can any one suggests an alternate method so that the process goes with MTA
instead of STA or atleast any ways to minimise the deadlock condition?


Simple solution is to create/access instances of those COM objects on/from a
STA threads, that is initialize your threads as STA by setting the
ApartmentState to STA before starting the thread.

Willy.

Nov 17 '05 #5

"stic" <st*************@gmail.com> wrote in message
news:11**********************@o13g2000cwo.googlegr oups.com...
Hi Willy,

Maybe as a MVP you would know this...
Do you know why the pages at MSDN which discribes STA and MTA are
disappiring ?

--
best regards
stic


I'm not clear on what you mean with "disappiring", but if you mean there is
no info about STA/MTA on msdn, you could do a search for "single threaded
apartment" on msdn and you will get a huge list of hits.
One of them is:
http://msdn.microsoft.com/library/de...e0bf3889af.asp
Or are you looking for something else?

Willy.
Nov 17 '05 #6
Just to make sure we are talking about managed code here.
Your VB6 COM objects are created and accessed from from C# (.NET) managed
code right?

Willy.

"Venkat" <Ve****@discussions.microsoft.com> wrote in message
news:D4**********************************@microsof t.com...
I didnot understand, can you be more specific with an example?

venkat.

"Willy Denoyette [MVP]" wrote:

"Venkat" <Ve****@discussions.microsoft.com> wrote in message
news:71**********************************@microsof t.com...
> Hi,
> We have a dozens of VB6 components, developed some 5 years before,
> we
> have now few .Net components which references these files. Ideally we
> are
> using Biztalk server and referencing these VB6 components into that,
> what
> happens is that during actual transaction with several instances, the
> process(biztalk)
> gets automatically shutdown.
>
> on researching the problem it was found that all VB6 compentes were STA
> and
> so when loaded into memory it caused a deadlock problem. The solun
> ideally
> is
> to convert all the vb6 componets to .net components, but as of now this
> is
> practically impossible.
>
> can any one suggests an alternate method so that the process goes with
> MTA
> instead of STA or atleast any ways to minimise the deadlock condition?


Simple solution is to create/access instances of those COM objects
on/from a
STA threads, that is initialize your threads as STA by setting the
ApartmentState to STA before starting the thread.

Willy.

Nov 17 '05 #7
The issue is that these methods are executing under BizTalk 2004. This means that the VB6 components are being called from ThreadPool threads which will enter the MTA and so all the VB6 components will join the Host STA (all of them will be serviced on the same thread) which is not good for scaleability.

One solution would be to write a .NET component that managed a custom thread pool of STA threads and ran a number of VB6 objects in those STAs. However, this is a non-trivial thing to build (and to some degree is a bit like reimplementing part of MTS ;-) ) - which thinking about it could be another solution - to host the VB6 components under COM+ and use COM+s threading infrastructure to provide the multiplexing.

Regards

Richard Blewett - DevelopMentor
http://www.dotnetconsult.co.uk/weblog
http://www.dotnetconsult.co.uk

Just to make sure we are talking about managed code here.
Your VB6 COM objects are created and accessed from from C# (.NET) managed
code right?

Willy.
Nov 17 '05 #8
Richard,

I didn't look into Biztalk 2004 yet, but as it looks like it's not that "COM
friendly" environment to live in.
All STA (that is all VB6) objects will be hosted by the SINGLE STA host
thread so all calls have to be serialized/marshaled which is not scalable at
all, worse, who guarantees correct message pumping on this thread (which
might explain the deadlock issues OP is referring to)? When one such
component fails it brings down the whole process.
So I'm in full agreement with you as to host these STA objects in a server
type COM+ application or multiple applications, which is IMO the environment
where most such "server" style components should live. Sure you pay the
inter-process call overhead, but you get a lot back like multiple threads
hosting STA's, security process control ...

Willy.
"Richard Blewett [DevelopMentor]" <ri******@NOSPAMdevelop.com> wrote in
message news:uu*************@TK2MSFTNGP09.phx.gbl...
The issue is that these methods are executing under BizTalk 2004. This
means that the VB6 components are being called from ThreadPool threads
which will enter the MTA and so all the VB6 components will join the Host
STA (all of them will be serviced on the same thread) which is not good
for scaleability.

One solution would be to write a .NET component that managed a custom
thread pool of STA threads and ran a number of VB6 objects in those STAs.
However, this is a non-trivial thing to build (and to some degree is a bit
like reimplementing part of MTS ;-) ) - which thinking about it could be
another solution - to host the VB6 components under COM+ and use COM+s
threading infrastructure to provide the multiplexing.

Regards

Richard Blewett - DevelopMentor
http://www.dotnetconsult.co.uk/weblog
http://www.dotnetconsult.co.uk

Just to make sure we are talking about managed code here.
Your VB6 COM objects are created and accessed from from C# (.NET) managed
code right?

Willy.

Nov 17 '05 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: William C. White | last post by:
Does anyone know of a way to use PHP /w Authorize.net AIM without using cURL? Our website is hosted on a shared drive and the webhost company doesn't installed additional software (such as cURL)...
2
by: Albert Ahtenberg | last post by:
Hello, I don't know if it is only me but I was sure that header("Location:url") redirects the browser instantly to URL, or at least stops the execution of the code. But appearantely it continues...
3
by: James | last post by:
Hi, I have a form with 2 fields. 'A' 'B' The user completes one of the fields and the form is submitted. On the results page I want to run a query, but this will change subject to which...
0
by: Ollivier Robert | last post by:
Hello, I'm trying to link PHP with Oracle 9.2.0/OCI8 with gcc 3.2.3 on a Solaris9 system. The link succeeds but everytime I try to run php, I get a SEGV from inside the libcnltsh.so library. ...
1
by: Richard Galli | last post by:
I want viewers to compare state laws on a single subject. Imagine a three-column table with a drop-down box on the top. A viewer selects a state from the list, and that state's text fills the...
4
by: Albert Ahtenberg | last post by:
Hello, I have two questions. 1. When the user presses the back button and returns to a form he filled the form is reseted. How do I leave there the values he inserted? 2. When the...
1
by: inderjit S Gabrie | last post by:
Hi all Here is the scenerio ...is it possibly to do this... i am getting valid course dates output on to a web which i have designed ....all is okay so far , look at the following web url ...
2
by: Jack | last post by:
Hi All, What is the PHP equivilent of Oracle bind variables in a SQL statement, e.g. select x from y where z=:parameter Which in asp/jsp would be followed by some statements to bind a value...
3
by: Sandwick | last post by:
I am trying to change the size of a drawing so they are all 3x3. the script below is what i was trying to use to cut it in half ... I get errors. I can display the normal picture but not the...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.