|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Transactions
{
using System.Diagnostics.CodeAnalysis;
using System.Runtime;
using System.ServiceModel.Security;
using System.Transactions;
using Microsoft.Transactions.Wsat.Messaging;
class WsatTransactionInfo : TransactionInfo
{
WsatProxy wsatProxy;
CoordinationContext context;
RequestSecurityTokenResponse issuedToken;
public WsatTransactionInfo(WsatProxy wsatProxy,
CoordinationContext context,
RequestSecurityTokenResponse issuedToken)
{
this.wsatProxy = wsatProxy;
this.context = context;
this.issuedToken = issuedToken;
}
[SuppressMessage(FxCop.Category.Security, FxCop.Rule.AptcaMethodsShouldOnlyCallAptcaMethods, Justification = "The calls into CoordinationContext are safe.")]
public override Transaction UnmarshalTransaction()
{
Transaction tx;
if (WsatIncomingTransactionCache.Find(this.context.Identifier, out tx))
return tx;
tx = this.wsatProxy.UnmarshalTransaction(this);
// Cache extended information for subsequent marshal operations
WsatExtendedInformation info = new WsatExtendedInformation(context.Identifier, context.Expires);
info.TryCache(tx);
// Cache the unmarshalled transaction for subsequent unmarshal operations
WsatIncomingTransactionCache.Cache(this.context.Identifier, tx);
return tx;
}
public CoordinationContext Context
{
get { return this.context; }
}
public RequestSecurityTokenResponse IssuedToken
{
get { return this.issuedToken; }
}
}
}
|