C#では、DBを更新するOracleConnectionと、DBを更新するためにC#が呼び出すレガシーVB6 DLL(DLL内ではADODB.Connectionオブジェクトを使用)への参照があります。1つのトランザクション内でDBを更新する管理コードとunamangedコードはありますか?
大規模なトランザクションで両方をラップする必要があるため、管理対象と非管理対象の両方の更新プログラムがロールバックまたはコミットされます。
C#クラスをSystem.EnterpriseServices.ServicedComponentから継承し、[Transaction(TransactionOption.Required)]で装飾してから、最終的にヒットする呼び出しシーケンスを開始するメソッドで[オートコンプリート]を使用してみました。 OracleConnectionおよびVB6 DLLの起動。このよう
:私は私のクラスがパブリック、コンクリートである、と持っていることを確認した
{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)
:私のテストハーネスがMyClassTxをインスタンス化しようとしたとき
が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();
}
}
}
しかし、私はこのエラーを取得しますパラメータのないコンストラクタ。それでも、インスタンス化されません。
私のアセンブリを強くタイプし、それをCOM +パッケージに入れてからデバッグすることもできますか?私は、VS2010を使用して、ServicedComponentを継承するコードにステップインしていると仮定しました。
私は、COM +を使用しているので、約8年ぶり、そしてこれはC#で動作するように取得しようとしている私は初めてなので、任意の助けをいただければ幸いです!私はここに愚かな道を見出していますし、同じトランザクションに私の管理とunamanagedコードを取得する簡単な方法があるかどう
また、私を啓発してください!
Googleで何時間も手伝ってくれていません。
多くの感謝!