예제 #1
0
    internal OletxTransactionManager(string nodeName)
    {
        lock (ClassSyncObject)
        {
            // If we have not already initialized the shim factory and started the notification
            // thread, do so now.
            if (ProxyShimFactory == null)
            {
                ProxyShimFactory = new DtcProxyShimFactory(ShimWaitHandle);

                ThreadPool.UnsafeRegisterWaitForSingleObject(
                    ShimWaitHandle,
                    ShimNotificationCallback,
                    null,
                    -1,
                    false);
            }
        }

        DtcTransactionManagerLock = new ReaderWriterLock();

        _nodeNameField = nodeName;

        // The DTC proxy doesn't like an empty string for node name on 64-bit platforms when
        // running as WOW64.  It treats any non-null node name as a "remote" node and turns off
        // the WOW64 bit, causing problems when reading the registry.  So if we got on empty
        // string for the node name, just treat it as null.
        if (_nodeNameField is { Length : 0 })
예제 #2
0
 internal NotificationShimBase(DtcProxyShimFactory shimFactory, object?enlistmentIdentifier)
 {
     ShimFactory          = shimFactory;
     EnlistmentIdentifier = enlistmentIdentifier;
     NotificationType     = ShimNotificationType.None;
     AbortingHint         = false;
     IsSinglePhase        = false;
 }
예제 #3
0
 internal Phase0NotifyShim(DtcProxyShimFactory shimFactory, object enlistmentIdentifier)
     : base(shimFactory, enlistmentIdentifier)
 {
 }
예제 #4
0
 internal VoterBallotShim(DtcProxyShimFactory shimFactory, VoterNotifyShim notifyShim)
 => _voterNotifyShim = notifyShim;
예제 #5
0
 internal TransactionShim(DtcProxyShimFactory shimFactory, TransactionNotifyShim notifyShim, ITransaction transaction)
 {
     _shimFactory           = shimFactory;
     _transactionNotifyShim = notifyShim;
     Transaction            = transaction;
 }
예제 #6
0
 internal ResourceManagerShim(DtcProxyShimFactory shimFactory)
 => _shimFactory = shimFactory;
예제 #7
0
 internal ResourceManagerNotifyShim(
     DtcProxyShimFactory shimFactory,
     object enlistmentIdentifier)
     : base(shimFactory, enlistmentIdentifier)
 {
 }
예제 #8
0
 internal DtcTransactionManager(string?nodeName, OletxTransactionManager oletxTm)
 {
     _nodeName         = nodeName;
     _oletxTm          = oletxTm;
     _proxyShimFactory = OletxTransactionManager.ProxyShimFactory;
 }
예제 #9
0
 internal TransactionNotifyShim(DtcProxyShimFactory shimFactory, object?enlistmentIdentifier)
     : base(shimFactory, enlistmentIdentifier)
 {
 }
예제 #10
0
 internal EnlistmentNotifyShim(DtcProxyShimFactory shimFactory, OletxEnlistment enlistmentIdentifier)
     : base(shimFactory, enlistmentIdentifier)
 {
     _ignoreSpuriousProxyNotifications = false;
 }