public static void AddIssuedToken(Message message, RequestSecurityTokenResponse rstr)
 {
     TransactionFlowProperty.Ensure(message).IssuedTokens.Add(rstr);
     if (DebugTrace.Verbose)
     {
         DebugTrace.Trace(TraceLevel.Verbose, "Added issued token to message");
     }
 }
        public static void Set(byte[] propToken, Message message)
        {
            if (message.Properties.ContainsKey(PropertyName))
            {
                throw new CommunicationException("A transaction flow property is already set on the message.");
            }

            TransactionFlowProperty property = new TransactionFlowProperty();
            property.propToken = propToken;
            message.Properties.Add(PropertyName, property);
        }
        public static RequestSecurityTokenResponse GetIssuedToken(Message message, string identifier, ProtocolVersion protocolVersion)
        {
            ICollection <RequestSecurityTokenResponse> is2 = TransactionFlowProperty.TryGetIssuedTokens(message);

            if (is2 == null)
            {
                if (DebugTrace.Verbose)
                {
                    DebugTrace.Trace(TraceLevel.Verbose, "No issued tokens found in message");
                }
                return(null);
            }
            string str  = CoordinationStrings.Version(protocolVersion).Identifier;
            string str2 = CoordinationStrings.Version(protocolVersion).Namespace;

            foreach (RequestSecurityTokenResponse response in is2)
            {
                string str3;
                string str4;
                response.GetAppliesToQName(out str3, out str4);
                if ((str3 == str) && (str4 == str2))
                {
                    if (DebugTrace.Verbose)
                    {
                        DebugTrace.Trace(TraceLevel.Verbose, "Found issued token in message");
                    }
                    try
                    {
                        IdentifierElement      appliesTo  = null;
                        DataContractSerializer serializer = IdentifierElementSerializer(protocolVersion);
                        ProtocolVersionHelper.AssertProtocolVersion(protocolVersion, typeof(CoordinationServiceSecurity), "GetIssuedToken");
                        switch (protocolVersion)
                        {
                        case ProtocolVersion.Version10:
                            appliesTo = response.GetAppliesTo <IdentifierElement10>(serializer);
                            break;

                        case ProtocolVersion.Version11:
                            appliesTo = response.GetAppliesTo <IdentifierElement11>(serializer);
                            break;
                        }
                        if (!(appliesTo.Identifier != identifier))
                        {
                            return(response);
                        }
                        if (DebugTrace.Error)
                        {
                            DebugTrace.Trace(TraceLevel.Error, "Issued token identifier does not match expected {0}", identifier);
                        }
                        throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(Microsoft.Transactions.SR.GetString("IssuedTokenIdentifierMismatch")));
                    }
                    catch (SerializationException exception)
                    {
                        if (DebugTrace.Error)
                        {
                            DebugTrace.Trace(TraceLevel.Error, "Issued token AppliesTo element could not be deserialized: {0}", exception.Message);
                        }
                        throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(exception.Message, exception));
                    }
                    return(response);
                }
            }
            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "No matching issued token found in message");
            }
            return(null);
        }
 private static void SendTransaction(ref ProxyRpc rpc)
 {
     TransactionFlowProperty.Set(Transaction.Current, rpc.Request);
 }