Transaction context in use by another session
I've read MSDN cover to cover. I've searched the internet all the way to the
end and even read the index, but I can not find a reasonable explanation for
my issue.
An C#/ASP.Net 1.1 application uses Enterprise Services for Transactional
database updates. The object itself is marked
[Transaction(TransactionOption.Required,Timeout=0),EventTrackingEnabled(true)] and each method is marked [AutoComplete(true)]
A client is experiencing "Transaction context in use by another session"
exceptions. The error logs show that the exception happens doing the same
procedure, so it seems pretty cut and dry.
However, we can't reproduce the error in our labs, on a development machine,
or even on demand. The real problem is that the error occurs randomly. It's
not reproducible. It may occur 20 times in one day and may not appear again
for weeks.
In order to recreate the conditions of the application, I created a test web
app that references the same business layer objects that the primary
application references, then hardcoded some values and used the same code to
try to reproduce the error and test what I believe to be the issue. I am
able to generate a "Transaction context in use by another session" exception,
and I am able to pinpoint the line of code that causes it. A COM+
Transaction is started, then several layers in the stack later a fetch is
performed which is when the exception occurs. If I try it against SQL 2005 I
get a similar, but more descriptive "DataReader" exception. Regardless, in
both cases it's what I expect.
So, after pinpointing the offensive line of code I still can't get the main
application to fail. No matter what I try, how I configure COM+, IIS, or
..Net, I can't get the main application to fail - only the test app.
This has nothing to do with DTS, I've read the MSDN BUG: Error 3910,
"Transaction Context in Use by Another Session" article, which has nothing at
all to do with my scenario, other than the "In SQL Server, it is not
permitted for two connections in the same transaction to execute a query
against the same SQL instance concurrently." which would explain why my test
app fails.
But it doesn't explain why, when the test app and the real app are both
using the exact same code, stepping through it line-by-line in VS2k3, and
even running an SQL Profiler trace (with no differences except the failure),
one fails and the other doesn't.
This has to be something related to IIS or COM+ or both. I have even
converted the code to WinForms and it fails reliably 100% of the time, yet
the main web app doesn't. Again, same references, same code, same
environment, same everything.
I've been working on this problem for over a month and can not find a reason
why it's so random.
Has anyone experienced this or does anyone have any ideas why the
"Transaction context in use by another session." would occur randomly
(unrelated to DTS, or linked servers - just plain vanilla DTC and COM+)?
Date:Wed, 11 Jul 2007 14:16:04 -0700
Author:
|