/// <summary> /// Indicate the end of requeusts /// </summary> /// <param name="count">indicating the number of the messages</param> /// <param name="timeoutMs">indicating the timeout in MS</param> /// <param name="clientId">indicating the client id</param> public void EndRequests(int count, string clientId, int batchId, int timeoutThrottlingMs, int timeoutEOMMs) { ParamCheckUtility.ThrowIfOutofRange(count < 0, "count"); ParamCheckUtility.ThrowIfOutofRange(timeoutThrottlingMs <= 0 && timeoutThrottlingMs != Timeout.Infinite, "timeoutThrottlingMs"); ParamCheckUtility.ThrowIfOutofRange(timeoutEOMMs <= 0 && timeoutEOMMs != Timeout.Infinite, "timeoutEOMMs"); ParamCheckUtility.ThrowIfNull(clientId, "clientId"); ParamCheckUtility.ThrowIfTooLong(clientId.Length, "clientId", Constant.MaxClientIdLength, SR.ClientIdTooLong); ParamCheckUtility.ThrowIfNotMatchRegex(ParamCheckUtility.ClientIdValid, clientId, "clientId", SR.InvalidClientId); this.ThrowIfDisposed(); this.CheckAuth(); BrokerTracing.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "[BrokerController] Receive EOM for Client {0}, Count = {1}", clientId, count); try { #region Debug Failure Test SimulateFailure.FailOperation(1); #endregion BrokerClient brokerClient = this.GetClient(clientId); FrontEndBase frontendBase = brokerClient.GetDuplexFrontEnd(); WaitOnThrottling(frontendBase, timeoutThrottlingMs); // Then handle the EOM which waits until all requests are stored. Use user specified EndRequests timeout for this brokerClient.EndOfMessage(count, batchId, timeoutEOMMs); #region Debug Failure Test SimulateFailure.FailOperation(2); #endregion } catch (Exception e) { BrokerTracing.TraceError("[BrokerController] EOM failed for client {0}: {1}", clientId, e); throw TranslateException(e); } }