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)); }
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>()); }