Пример #1
0
        public override Task <byte[]> RequestResponseAsync(
            IServiceRemotingRequestContext requestContext,
            ServiceRemotingMessageHeaders messageHeaders,
            byte[] requestBody)
        {
            var user          = messageHeaders.GetUser();
            var correlationId = messageHeaders.GetCorrelationId();

            var headersInternal = messageHeaders.GetPrivateField <ServiceRemotingMessageHeaders, Dictionary <string, byte[]> >("headers");

            var headerNames = headersInternal.Keys;


            return(ServiceRequestContext.RunInRequestContext(
                       async() => await base.RequestResponseAsync(
                           requestContext,
                           messageHeaders,
                           requestBody),
                       correlationId, user));
        }
Пример #2
0
        public static Task <TResult> RunInRequestContext <TResult>(Func <Task <TResult> > action, Guid correlationId, string user)
        {
            Task <Task <TResult> > task = null;

            task = new Task <Task <TResult> >(async() =>
            {
                Debug.Assert(ServiceRequestContext.Current == null);
                ServiceRequestContext.Current = new ServiceRequestContext(correlationId, user);
                try
                {
                    return(await action());
                }
                finally
                {
                    ServiceRequestContext.Current = null;
                }
            });
            task.Start();
            return(task.Unwrap <TResult>());
        }