Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem eine Microsoft Distributed Transaction Coordinator (MSDTC)-Transaktion voll vertrauenswürdig ist und nicht in einer Sandkastenlösung ausgeführt werden kann.
Originalproduktversion: .NET Framework 4.5
Ursprüngliche KB-Nummer: 2998281
Symptome
Gehen Sie davon aus, dass Sie eine Anwendung im Sandkastenmodus ausführen (oder einfach eine Anwendung ohne .NET Full Trust ausführen). Wenn Sie Vorgänge ausprobieren, die System.Transactions
Zugriff auf einen verteilten Transaktionskoordinator (in der Regel MSDTC) erfordern, erfüllen Sie die folgende Ausnahme:
System.Security.SecurityException: Anforderung fehlgeschlagen.
Die Serverstapelablaufverfolgung lautet wie folgt:
at System.ServiceModel.Transactions.OleTxTransactionFormatter.WriteTransaction(Transaction transaction, Message message)
bei System.ServiceModel.Channels.TransactionChannel1.WriteTransactionToMessage(Message message, TransactionFlowOption txFlowOption) at System.ServiceModel.Channels.TransactionChannel
1.WriteTransactionDataToMessage(Message message, MessageDirection direction)
at System.ServiceModel.Channels.TransactionDuplexChannelGeneric'1.Send(Message message, TimeSpan Timeout)
bei System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Aufruf(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Ursache
Dieses Verhalten ist beabsichtigt. Bestimmte Vorgänge innerhalb von System.Transactions
"Voll vertrauenswürdig" erfordern, da sie Zugriff auf privilegierte Dienste erfordern. Ohne voll vertrauenswürdige Vorgänge können diese Vorgänge nicht ausgeführt werden. Für die folgenden Vorgänge ist dies derzeit erforderlich:
- Alle Methoden für die
TransactionInterop
Klasse - Alle Variationen der
Transaction.EnlistDurable
Methode Transaction.EnlistPromotableSinglePhase
Transaction.PromoteAndEnlistDurable
- Zugriff auf das
TransactionManager.DistributedTransactionStarted
Ereignis - Zugriff auf die
TransactionManager.HostCurrentCallback
Eigenschaft - Nutzung und
TransactionManager.Reenlist
TransactionManager.RecoveryComplete
- Verwendung der
TransactionScope
Klasse, wenn einEnterpriseServicesInteropOption
Wert angegeben wird
Zwischenlösung
Um dieses Verhalten zu umgehen, führen Sie die Anwendung mit "Voll vertrauenswürdig" aus, oder erstellen Sie einen GAC-Assemblyproxy (Global Assembly Cache), der teilweise vertrauenswürdige Aufrufer akzeptiert, und rufen Sie diese Assembly dann aus der Sandkastenanwendung auf.