internal MsmqIntegrationChannelListener(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters)
     : base(bindingElement, context, receiveParameters, null)
 {
     SetSecurityTokenAuthenticator(MsmqUri.FormatNameAddressTranslator.Scheme, context);
     MsmqIntegrationReceiveParameters parameters = receiveParameters as MsmqIntegrationReceiveParameters;
     xmlSerializerList = XmlSerializer.FromTypes(parameters.TargetSerializationTypes);
 }
 protected MsmqChannelListenerBase(MsmqBindingElementBase bindingElement,
                                   BindingContext context,
                                   MsmqReceiveParameters receiveParameters,
                                   MessageEncoderFactory messageEncoderFactory)
     : base(bindingElement, context, messageEncoderFactory)
 {
     this.receiveParameters = receiveParameters;
 }
 protected MsmqChannelListenerBase(MsmqBindingElementBase bindingElement,
                                   BindingContext context,
                                   MsmqReceiveParameters receiveParameters,
                                   MessageEncoderFactory messageEncoderFactory)
     : base(bindingElement, context, messageEncoderFactory)
 {
     this.receiveParameters = receiveParameters;
 }
 public MsmqInputChannelBase(MsmqInputChannelListenerBase listener, IMsmqMessagePool messagePool) : base(listener)
 {
     this.receiveParameters = listener.ReceiveParameters;
     this.receiver = new System.ServiceModel.Channels.MsmqReceiveHelper(listener.ReceiveParameters, listener.Uri, messagePool, this, listener);
     this.localAddress = new EndpointAddress(listener.Uri, new AddressHeader[0]);
     this.listener = listener;
     if (this.receiveParameters.ReceiveContextSettings.Enabled)
     {
         this.receiveContextManager = new MsmqReceiveContextLockManager(this.receiveParameters.ReceiveContextSettings, this.receiver.Queue);
     }
 }
Exemple #5
0
 internal MsmqReceiveHelper(MsmqReceiveParameters receiveParameters, Uri uri, IMsmqMessagePool messagePool, MsmqInputChannelBase channel, MsmqChannelListenerBase listener)
 {
     this.queueName         = receiveParameters.AddressTranslator.UriToFormatName(uri);
     this.receiveParameters = receiveParameters;
     this.uri           = uri;
     this.instanceId    = uri.ToString().ToUpperInvariant();
     this.pool          = messagePool;
     this.poisonHandler = Msmq.CreatePoisonHandler(this);
     this.channel       = channel;
     this.listener      = listener;
     this.queue         = Msmq.CreateMsmqQueue(this);
 }
 internal MsmqReceiveHelper(MsmqReceiveParameters receiveParameters, Uri uri, IMsmqMessagePool messagePool, MsmqInputChannelBase channel, MsmqChannelListenerBase listener)
 {
     this.queueName = receiveParameters.AddressTranslator.UriToFormatName(uri);
     this.receiveParameters = receiveParameters;
     this.uri = uri;
     this.instanceId = uri.ToString().ToUpperInvariant();
     this.pool = messagePool;
     this.poisonHandler = Msmq.CreatePoisonHandler(this);
     this.channel = channel;
     this.listener = listener;
     this.queue = Msmq.CreateMsmqQueue(this);
 }
Exemple #7
0
        internal static void VerifyReceiver(MsmqReceiveParameters receiveParameters, Uri listenUri)
        {
            MsmqException exception;
            bool          flag2;

            if (!receiveParameters.Durable && receiveParameters.ExactlyOnce)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqNoAssurancesForVolatile")));
            }
            if (receiveParameters.ReceiveContextSettings.Enabled && !receiveParameters.ExactlyOnce)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqExactlyOnceNeededForReceiveContext")));
            }
            VerifySecurity(receiveParameters.TransportSecurity, null);
            string formatName = receiveParameters.AddressTranslator.UriToFormatName(listenUri);

            if (receiveParameters.ReceiveContextSettings.Enabled && formatName.Contains(";"))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqReceiveContextSubqueuesNotSupported")));
            }
            if (!MsmqQueue.IsReadable(formatName, out exception))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqQueueNotReadable"), exception));
            }
            bool flag = false;

            flag = MsmqQueue.TryGetIsTransactional(formatName, out flag2);
            try
            {
                if (!flag && (receiveParameters is MsmqTransportReceiveParameters))
                {
                    flag = MsmqQueue.TryGetIsTransactional(MsmqUri.ActiveDirectoryAddressTranslator.UriToFormatName(listenUri), out flag2);
                }
            }
            catch (MsmqException exception2)
            {
                MsmqDiagnostics.ExpectedException(exception2);
            }
            if (flag)
            {
                if (!receiveParameters.ExactlyOnce && flag2)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqNonTransactionalQueueNeeded")));
                }
                if (receiveParameters.ExactlyOnce && !flag2)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqTransactionalQueueNeeded")));
                }
            }
            if (receiveParameters.ExactlyOnce)
            {
                if (Msmq.IsAdvancedPoisonHandlingSupported)
                {
                    if (!formatName.Contains(";"))
                    {
                        if (!MsmqQueue.IsMoveable(formatName + ";retry"))
                        {
                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqDirectFormatNameRequiredForPoison")));
                        }
                    }
                    else if (ReceiveErrorHandling.Move == receiveParameters.ReceiveErrorHandling)
                    {
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqNoMoveForSubqueues")));
                    }
                }
                else if ((ReceiveErrorHandling.Reject == receiveParameters.ReceiveErrorHandling) || (ReceiveErrorHandling.Move == receiveParameters.ReceiveErrorHandling))
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("MsmqAdvancedPoisonHandlingRequired")));
                }
            }
        }
 internal MsmqInputChannelListener(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters) : base(bindingElement, context, receiveParameters)
 {
     base.SetSecurityTokenAuthenticator(MsmqUri.NetMsmqAddressTranslator.Scheme, context);
 }
Exemple #9
0
        internal static void VerifyReceiver(MsmqReceiveParameters receiveParameters, Uri listenUri)
        {
            if (!receiveParameters.Durable && receiveParameters.ExactlyOnce)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqNoAssurancesForVolatile)));
            }
            if (receiveParameters.ReceiveContextSettings.Enabled && !receiveParameters.ExactlyOnce)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqExactlyOnceNeededForReceiveContext)));
            }

            VerifySecurity(receiveParameters.TransportSecurity, null);

            string formatName = receiveParameters.AddressTranslator.UriToFormatName(listenUri);

            if (receiveParameters.ReceiveContextSettings.Enabled && formatName.Contains(";"))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqReceiveContextSubqueuesNotSupported)));
            }

            // check if can open the queue for read
            MsmqException msmqException;

            if (!MsmqQueue.IsReadable(formatName, out msmqException))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqQueueNotReadable), msmqException));
            }

            // check if the queue is transactional
            bool knownTxStatus = false;
            bool isQueueTx;

            knownTxStatus = MsmqQueue.TryGetIsTransactional(formatName, out isQueueTx);
            try
            {
                if (!knownTxStatus && (receiveParameters is MsmqTransportReceiveParameters))
                {
                    knownTxStatus = MsmqQueue.TryGetIsTransactional(MsmqUri.ActiveDirectoryAddressTranslator.UriToFormatName(listenUri), out isQueueTx);
                }
            }
            catch (MsmqException ex) // active directory lookup may cause exceptions for certain scenarios
            {
                MsmqDiagnostics.ExpectedException(ex);
            }
            if (knownTxStatus)
            {
                if (!receiveParameters.ExactlyOnce && isQueueTx)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqNonTransactionalQueueNeeded)));
                }
                if (receiveParameters.ExactlyOnce && !isQueueTx)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqTransactionalQueueNeeded)));
                }
            }

            // check poison handling settings
            if (receiveParameters.ExactlyOnce)
            {
                if (Msmq.IsAdvancedPoisonHandlingSupported) // msmq 4
                {
                    if (formatName.Contains(";"))
                    {
                        // no retry queues for subqueues
                        if (ReceiveErrorHandling.Move == receiveParameters.ReceiveErrorHandling)
                        {
                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqNoMoveForSubqueues)));
                        }
                    }
                    else
                    {
                        // should be able to open the retry queue for move
                        if (!MsmqQueue.IsMoveable(formatName + ";retry"))
                        {
                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqDirectFormatNameRequiredForPoison)));
                        }
                    }
                }
                else
                {
                    if (ReceiveErrorHandling.Reject == receiveParameters.ReceiveErrorHandling || ReceiveErrorHandling.Move == receiveParameters.ReceiveErrorHandling)
                    {
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqAdvancedPoisonHandlingRequired)));
                    }
                }
            }
        }
Exemple #10
0
 internal MsmqInputChannelListenerBase(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters) : this(bindingElement, context, receiveParameters, TransportDefaults.GetDefaultMessageEncoderFactory())
 {
 }
Exemple #11
0
 internal MsmqInputChannelListenerBase(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters, MessageEncoderFactory encoderFactory) : base(bindingElement, context, receiveParameters, encoderFactory)
 {
     this.acceptor = new InputQueueChannelAcceptor <IInputChannel>(this);
 }
 internal MsmqInputChannelListener(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters) : base(bindingElement, context, receiveParameters)
 {
     base.SetSecurityTokenAuthenticator(MsmqUri.NetMsmqAddressTranslator.Scheme, context);
 }
        internal MsmqInputSessionChannelListener(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters)
            : base(bindingElement, context, receiveParameters, TransportDefaults.GetDefaultMessageEncoderFactory())
        {
            SetSecurityTokenAuthenticator(MsmqUri.NetMsmqAddressTranslator.Scheme, context);
            this.receiver = new MsmqReceiveHelper(
                this.ReceiveParameters,
                this.Uri,
                new MsmqInputMessagePool((this.ReceiveParameters as MsmqTransportReceiveParameters).MaxPoolSize),
                null,
                this
                );

            if (this.ReceiveParameters.ReceiveContextSettings.Enabled)
            {
                this.receiveContextManager = new MsmqReceiveContextLockManager(this.ReceiveParameters.ReceiveContextSettings, this.receiver.Queue);
            }
        }