Esempio n. 1
0
        private void ValidateReply(Message reply, string replyAction)
        {
            if (base.interoperating)
            {
                if (!base.coordinationService.Security.CheckIdentity(this, reply))
                {
                    throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatReceiveFailureException(Microsoft.Transactions.SR.GetString("ReplyServerCredentialMismatch")));
                }
                if (!base.coordinationService.GlobalAcl.AccessCheckReply(reply, BindingStrings.InteropBindingQName(base.protocolVersion)))
                {
                    throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatReceiveFailureException(Microsoft.Transactions.SR.GetString("ReplyServerIdentityAccessDenied", new object[] { base.to.Uri })));
                }
            }
            string action = reply.Headers.Action;

            if ((reply.IsFault || (action == base.atomicTransactionStrings.FaultAction)) || (action == base.coordinationStrings.FaultAction))
            {
                MessageFault fault = MessageFault.CreateFault(reply, 0x10000);
                throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatFaultException(fault, action));
            }
            if (action != replyAction)
            {
                throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatReceiveFailureException(Microsoft.Transactions.SR.GetString("InvalidMessageAction", new object[] { action })));
            }
        }
        private bool AccessCheck(AuthorizationContext authzContext, MessageProperties messageProperties, string binding)
        {
            bool result = false;

            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "AccessCheck for binding {0}", binding);
            }
            if (string.Compare(binding, BindingStrings.InteropBindingQName(this.protocolVersion), StringComparison.Ordinal) == 0)
            {
                result = this.AccessCheck(authzContext, messageProperties, ClaimTypes.Thumbprint, this.thumbprints);
            }
            else if ((string.Compare(binding, BindingStrings.NamedPipeBindingQName, StringComparison.Ordinal) == 0) || (string.Compare(binding, BindingStrings.WindowsBindingQName, StringComparison.Ordinal) == 0))
            {
                result = this.AccessCheck(authzContext, messageProperties, ClaimTypes.Sid, this.sids);
            }
            else
            {
                Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Unknown binding " + binding);
            }
            this.TraceAccessCheckResult(result, messageProperties);
            return(result);
        }
        public ICoordinationListener Add(IRegistrationCoordinator serviceInstance)
        {
            DebugTrace.TraceEnter("CoordinationService.Add (IRegistrationCoordinator)");
            this.AssertProtocolServiceMode();
            IWSRegistrationCoordinator dispatcher = RegistrationCoordinatorDispatcher.Instance(this, serviceInstance);
            ICoordinationListener      listener   = this.CreateService(dispatcher, dispatcher.ContractType, BindingStrings.RegistrationCoordinatorSuffix(this.protocolVersion));

            DebugTrace.TraceLeave("CoordinationService.Add (IRegistrationCoordinator)");
            return(listener);
        }
        public ICoordinationListener Add(ICompletionParticipant serviceInstance)
        {
            DebugTrace.TraceEnter("CoordinationService.Add (ICompletionParticipant)");
            this.AssertProtocolServiceMode();
            IWSCompletionParticipant dispatcher = CompletionParticipantDispatcher.Instance(this, serviceInstance);
            ICoordinationListener    listener   = this.CreateService(dispatcher, dispatcher.ContractType, BindingStrings.CompletionParticipantSuffix(this.protocolVersion));

            DebugTrace.TraceLeave("CoordinationService.Add (ICompletionParticipant)");
            return(listener);
        }