Exemplo n.º 1
0
        /// <summary>
        /// Triggers for queue events
        /// </summary>
        /// <param name="eventId">indicating the event id</param>
        /// <param name="eventArgs">indicating the event args</param>
        private void Queue_OnEvent(BrokerQueueEventId eventId, EventArgs eventArgs)
        {
            if (eventId == BrokerQueueEventId.AllRequestsProcessed)
            {
                // Handle the event in a seperate thread to avoid potential deadlock
                ThreadPool.QueueUserWorkItem(
                    new ThreadHelper <object>(new WaitCallback(this.OnAllRequestsProcessed)).CallbackRoot
                    );
            }
            else if (eventId == BrokerQueueEventId.AllResponesDispatched ||
                     (this.sharedData.SessionFailed && eventId == BrokerQueueEventId.AvailableResponsesDispatched))
            {
                if (eventId == BrokerQueueEventId.AvailableResponsesDispatched)
                {
                    BrokerTracing.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "[BrokerClient] Client {0}: All available responses dispatched, send EndOfResponse message", this.clientId);
                }
                else
                {
                    BrokerTracing.EtwTrace.LogBrokerClientAllResponseDispatched(this.sharedData.BrokerInfo.SessionId, this.clientId);
                }

                if (this.responsesClient != null)
                {
                    this.responsesClient.EndOfResponses(eventId, (ResponseEventArgs)eventArgs);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// End of responses received
        /// </summary>
        /// <param name="eventId">indicating the event id</param>
        /// <param name="eventArgs">indicating the event args</param>
        public override void EndOfResponses(BrokerQueueEventId eventId, ResponseEventArgs eventArgs)
        {
            IResponseServiceCallback callback = (IResponseServiceCallback)(eventArgs.State as object[])[0];
            string clientData = (eventArgs.State as object[])[1].ToString();

            // if the broker fails and the last available response received, then append the session failure fault message let the client API to handle the failure gracefully.
            if (eventId == BrokerQueueEventId.AvailableResponsesDispatched)
            {
                this.ReplyFaultMessage(callback, FrontEndFaultMessage.GenerateFaultMessage(null, this.Version, SOAFaultCode.Broker_SessionFailure, SR.SessionFailure), clientData);
            }

            this.ReplyEndOfMessage(callback, clientData);
        }
Exemplo n.º 3
0
            /// <summary>
            /// Indicates EndOfResponses event has been triggered
            /// </summary>
            /// <param name="eventId">indicating the event id</param>
            public void EndOfResponses(BrokerQueueEventId eventId)
            {
                if (eventId == BrokerQueueEventId.AllResponesDispatched ||
                    (this.sharedData.SessionFailed && eventId == BrokerQueueEventId.AvailableResponsesDispatched))
                {
                    if (eventId == BrokerQueueEventId.AvailableResponsesDispatched)
                    {
                        this.GenerateFaultMessage(EndOfResponsesReason.ClientTimeout);
                    }

                    this.eom = true;
                    this.completeEvent.Set();
                }
            }
Exemplo n.º 4
0
 internal void DispatchEvent(BrokerQueueEventId eventId, EventArgs eventArgs)
 {
     if (this.OnEvent != null)
     {
         try
         {
             this.OnEvent(eventId, eventArgs);
         }
         catch (Exception e)
         {
             BrokerTracing.TraceWarning("[BrokerQueue] .DispatchEvent: the event handler raised exception, {0}", e);
         }
     }
 }
Exemplo n.º 5
0
 /// <summary>
 /// Informs that EndOfResponses has reached
 /// </summary>
 /// <param name="eventId">indicating the event id</param>
 /// <param name="eventArgs">indicating the event args</param>
 public override void EndOfResponses(BrokerQueueEventId eventId, ResponseEventArgs eventArgs)
 {
     this.result.EndOfResponses(eventId);
 }
Exemplo n.º 6
0
 /// <summary>
 /// Informs that EndOfResponses has reached
 /// </summary>
 /// <param name="eventId">indicating the event id</param>
 /// <param name="eventArgs">indicating the event args</param>
 public abstract void EndOfResponses(BrokerQueueEventId eventId, ResponseEventArgs eventArgs);