Exemple #1
0
        public async Task <FabricTransportMessage> RequestResponseAsync(FabricTransportRequestContext requestContext,
                                                                        FabricTransportMessage fabricTransportMessage)
        {
            if (null != this.serviceRemotingPerformanceCounterProvider.serviceOutstandingRequestsCounterWriter)
            {
                this.serviceRemotingPerformanceCounterProvider.serviceOutstandingRequestsCounterWriter
                .UpdateCounterValue(1);
            }
            var requestStopWatch = Stopwatch.StartNew();
            var requestResponseSerializationStopwatch = Stopwatch.StartNew();

            try
            {
                var remotingRequestMessage = this.CreateRemotingRequestMessage(fabricTransportMessage, requestResponseSerializationStopwatch
                                                                               );

                var retval = await
                             this.remotingMessageHandler.HandleRequestResponseAsync(
                    new FabricTransportServiceRemotingRequestContext(requestContext, this.serializersManager),
                    remotingRequestMessage);

                return(this.CreateFabricTransportMessage(retval, remotingRequestMessage.GetHeader().InterfaceId, requestResponseSerializationStopwatch));
            }
            catch (Exception ex)
            {
                ServiceTrace.Source.WriteInfo("FabricTransportMessageHandler", "Remote Exception occured {0}", ex);
                return(this.CreateFabricTransportExceptionMessage(ex));
            }
            finally
            {
                fabricTransportMessage.Dispose();
                if (null != this.serviceRemotingPerformanceCounterProvider.serviceOutstandingRequestsCounterWriter)
                {
                    this.serviceRemotingPerformanceCounterProvider.serviceOutstandingRequestsCounterWriter
                    .UpdateCounterValue(-1);
                }

                if (null != this.serviceRemotingPerformanceCounterProvider.serviceRequestProcessingTimeCounterWriter)
                {
                    this.serviceRemotingPerformanceCounterProvider.serviceRequestProcessingTimeCounterWriter
                    .UpdateCounterValue(
                        requestStopWatch.ElapsedMilliseconds);
                }
            }
        }