e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
92 lines
3.2 KiB
C#
92 lines
3.2 KiB
C#
//------------------------------------------------------------
|
|
// 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();
|
|
}
|
|
}
|