Has anyone run into any problems with connecting to SQL Server 2000 database servers from within ServicedComponents that use the declarative transaction service in COM+?
The reason I ask is because while stabilizing the code base for our project, and doing a few tests with a third party product, we've run into a few snags that don't seem to repro, yet come up fairly often...
The first of them is when you get up the dreaded 0x8004D00E error, also known as "The transaction has already been implicitly or explicitly committed or aborted", which seems to come up in even pretty simple cases. I still have yet to determine what causes the problem, but most of the time shutting down the SQL Server engine and the MSDTC service on the database server and restarting them, then shutting down the COM+ server applications seems to resolve the issue.
The second one is actually somewhat uglier. While doing some tests with a third party transaction integration engine (especifically Unisys OpenTI product which I mentioned in another post) to have it call .NET ServiceComponents, we ran into a few cases where any transaction coming from the OpenTI side would cause the SqlConnection::Open() call in the .NET component to fail with a nice "unspecified error" error message (specifically, a ComException with the E_FAIL HRESULT (0x80004005).
The really annoying part of this last error was the fact that no other information was provided at all about the exception... no entries on the event log anywhere, no SQL Server errors... nothing! And what seemed like an even worse problem was that as far as I could see, the SqlClient provided left the failed connection on the pool, which caused subsequent calls to the component to fail for the same reason, even if they weren't coming in through the transaction gateway.
OK, so the last one is a fairly esoteric error, but trying to find out what the problem is is turning out to be quite painful. Ohh, and BTW, the machines in question are all running Win2k SP3 (yeah, time to move to SP4, I know).
Any Ideas?