Ejemplo n.º 1
0
        public override AsyncClientStreamingCall <TRequest, TResponse> AsyncClientStreamingCall <TRequest, TResponse>(Method <TRequest, TResponse> method, string host, CallOptions options)
        {
            options = options.Headers == null?options.WithHeaders(new Metadata()) : options;

            var _context             = new ClientInterceptorContext <TRequest, TResponse>(method, host, options);
            var rspCnt               = Calls.AsyncClientStreamingCall(CreateCall(method, host, options));
            var tracingRequestStream = new TracingClientStreamWriter <TRequest, TResponse>(rspCnt.RequestStream, _context, _tracer.Request);
            var rspAsync             = rspCnt.ResponseAsync.ContinueWith(rspTask =>
            {
                try
                {
                    var response = rspTask.Result;
                    _tracer.Response(response, _context);
                    _tracer.Finish(_context);
                    return(response);
                }
                catch (AggregateException ex)
                {
                    _tracer.Exception(_context, ex.InnerException, null);
                    throw ex.InnerException;
                }
            });

            return(new AsyncClientStreamingCall <TRequest, TResponse>(tracingRequestStream, rspAsync, rspCnt.ResponseHeadersAsync, rspCnt.GetStatus, rspCnt.GetTrailers, rspCnt.Dispose));
        }
        public AsyncDuplexStreamingCall <TRequest, TResponse> AsyncDuplexStreamingCall(Interceptor.AsyncDuplexStreamingCallContinuation <TRequest, TResponse> continuation)
        {
            var rspCnt = continuation(_context);
            var tracingRequestStream  = new TracingClientStreamWriter <TRequest>(rspCnt.RequestStream, _logger.Request);
            var tracingResponseStream = new TracingAsyncStreamReader <TResponse>(rspCnt.ResponseStream, _logger.Response, _logger.FinishSuccess, _logger.FinishException);
            var rspHeaderAsync        = rspCnt.ResponseHeadersAsync.ContinueWith(LogResponseHeader);

            return(new AsyncDuplexStreamingCall <TRequest, TResponse>(tracingRequestStream, tracingResponseStream, rspHeaderAsync, rspCnt.GetStatus, rspCnt.GetTrailers, rspCnt.Dispose));
        }
        public override AsyncDuplexStreamingCall <TRequest, TResponse> AsyncDuplexStreamingCall <TRequest, TResponse>(Method <TRequest, TResponse> method, string host, CallOptions options)
        {
            var _context              = new ClientInterceptorContext <TRequest, TResponse>(method, host, options);
            var rspCnt                = Calls.AsyncDuplexStreamingCall(CreateCall(method, host, options));
            var tracingRequestStream  = new TracingClientStreamWriter <TRequest, TResponse>(rspCnt.RequestStream, _context, _tracer.Request);
            var tracingResponseStream = new TracingAsyncClientStreamReader <TResponse, TRequest>(rspCnt.ResponseStream, _context, _tracer.Response, _tracer.Finish, _tracer.Exception);

            return(new AsyncDuplexStreamingCall <TRequest, TResponse>(tracingRequestStream, tracingResponseStream, rspCnt.ResponseHeadersAsync, rspCnt.GetStatus, rspCnt.GetTrailers, rspCnt.Dispose));
        }
        public AsyncClientStreamingCall <TRequest, TResponse> AsyncClientStreamingCall(Interceptor.AsyncClientStreamingCallContinuation <TRequest, TResponse> continuation)
        {
            var rspCnt = continuation(_context);
            var tracingRequestStream = new TracingClientStreamWriter <TRequest>(rspCnt.RequestStream, _logger.Request);
            var rspAsync             = rspCnt.ResponseAsync.ContinueWith(rspTask =>
            {
                try
                {
                    var response = rspTask.Result;
                    _logger.Response(response);
                    _logger.FinishSuccess();
                    return(response);
                }
                catch (AggregateException ex)
                {
                    _logger.FinishException(ex.InnerException);
                    throw ex.InnerException;
                }
            });
            var rspHeaderAsync = rspCnt.ResponseHeadersAsync.ContinueWith(LogResponseHeader);

            return(new AsyncClientStreamingCall <TRequest, TResponse>(tracingRequestStream, rspAsync, rspHeaderAsync, rspCnt.GetStatus, rspCnt.GetTrailers, rspCnt.Dispose));
        }