| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Transactions
- {
- using System;
- using System.ServiceModel.Channels;
- using System.Diagnostics;
- using System.ServiceModel;
- using System.Transactions;
- abstract class TransactionFormatter
- {
- static TransactionFormatter oleTxFormatter = new OleTxTransactionFormatter();
- static object syncRoot = new object();
- public static TransactionFormatter OleTxFormatter
- {
- get { return oleTxFormatter; }
- }
- // Double-checked locking pattern requires volatile for read/write synchronization
- static volatile TransactionFormatter wsatFormatter10;
- public static TransactionFormatter WsatFormatter10
- {
- get
- {
- if (wsatFormatter10 == null)
- {
- lock (syncRoot)
- {
- if (wsatFormatter10 == null)
- {
- wsatFormatter10 = new WsatTransactionFormatter10();
- }
- }
- }
- return wsatFormatter10;
- }
- }
- // Double-checked locking pattern requires volatile for read/write synchronization
- static volatile TransactionFormatter wsatFormatter11;
- public static TransactionFormatter WsatFormatter11
- {
- get
- {
- if (wsatFormatter11 == null)
- {
- lock (syncRoot)
- {
- if (wsatFormatter11 == null)
- {
- wsatFormatter11 = new WsatTransactionFormatter11();
- }
- }
- }
- return wsatFormatter11;
- }
- }
- public abstract MessageHeader EmptyTransactionHeader
- {
- get;
- }
- // Write transaction information to a message
- //
- // Return the transaction protocols that were successfully written to the message
- // Throw TransactionException if something goes wrong (e.g., TM comms failure)
- public abstract void WriteTransaction(Transaction transaction, Message message);
- // Read transaction information from a message
- //
- // Return a TransactionInfo instance if transaction headers are present in the message
- // Return null if no transaction headers are present in the message
- // Throw TransactionException if something goes wrong (e.g., malformed XML)
- public abstract TransactionInfo ReadTransaction(Message message);
- }
- abstract class TransactionInfo
- {
- // Convert transaction information from a message into an actual transaction
- //
- // Return a transaction instance if successful (fallback down the list of protocols as needed)
- // Throw TransactionException if a could not be unmarshaled.
- //
- // Should not throw an exception
- public abstract Transaction UnmarshalTransaction();
- }
- }
|