В C # у меня есть OracleConnection, которая обновляет БД, и ссылка на устаревшую библиотеку VB6, в которую C # обращается для обновления БД (в этой библиотеке используется объект ADODB.Connection).
Мне нужно обернуть их обоих в одну большую транзакцию, чтобы откат или фиксация как управляемых, так и неуправляемых обновлений вместе.
Я попытался переключить класс C #, чтобы он наследовал от System.EnterpriseServices.ServicedComponent иоформляется с помощью [Transaction (TransactionOption.Required)], а затем с помощью [AutoComplete] в методе, который запускает вызывающую последовательность, которая в конечном итоге попадает в вызов OracleConnection и VB6 DLL.
Например:
using System.EnterpriseServices;
{
[Transaction(TransactionOption.Required)]
public class MyClassTx: ServicedComponent
{
private MyClass1 _myClass1;
public MyClassTx()
{
}
// This method automatically commits the transaction if it succeeds.
[AutoComplete]
public void DoStuffTransactionally()
{
// Calls into different objects, doing some work that I'd like to have
// a big transaction around.
_MyClass1 = new MyClass1()
_MyClass1.DoSomeStuff();
}
}
}
Однако, когда мой тестовый комплект пытается создать экземпляр MyClassTx, я получаю эту ошибку:
{System.EnterpriseServices.RegistrationException: Invalid ServicedComponent-derived classes were found in the assembly.
(Classes must be public, concrete, have a public default constructor, and meet all other ComVisibility requirements)
Я убедился, что мой класс общедоступный, конкретный и имеет конструктор без параметров.Тем не менее, он не будет создан.
Нужно ли строго печатать мою сборку и поместить ее в пакет COM +, прежде чем я смогу ее отладить?Я бы предположил, что, используя VS2010, я мог бы просто войти в код, наследуемый от ServicedComponent.
Прошло около 8 лет с тех пор, как я использовал COM +, и я впервые пытаюсь заставить его работать вC #, поэтому любая помощь будет принята с благодарностью!
Кроме того, если я иду по глупому пути здесь, и есть более простой способ вставить мой управляемый и неуправляемый код в одну и ту же транзакцию, пожалуйста, просветите меня!
Несколько часов сGoogle мало чем помог.
Большое спасибо !!