Task ISendTransport.Send <T>(T message, IPipe <SendContext <T> > pipe, CancellationToken cancellationToken) { IPipe <EventDataSendEndpointContext> clientPipe = Pipe.ExecuteAsync <EventDataSendEndpointContext>(async clientContext => { var context = new EventDataSendContext <T>(message, cancellationToken); try { await pipe.Send(context).ConfigureAwait(false); await _observers.PreSend(context).ConfigureAwait(false); using (var messageBodyStream = context.GetBodyStream()) { var eventData = new EventData(messageBodyStream); KeyValuePair <string, object>[] headers = context.Headers.GetAll() .Where(x => x.Value != null && (x.Value is string || x.Value.GetType().IsValueType)) .ToArray(); foreach (KeyValuePair <string, object> header in headers) { if (eventData.Properties.ContainsKey(header.Key)) { continue; } eventData.Properties.Add(header.Key, header.Value); } if (context.PartitionKey != null) { eventData.PartitionKey = context.PartitionKey; } await clientContext.Send(eventData).ConfigureAwait(false); context.LogSent(); await _observers.PostSend(context).ConfigureAwait(false); } } catch (Exception ex) { await _observers.SendFault(context, ex).ConfigureAwait(false); throw; } }); return(_source.Send(clientPipe, cancellationToken)); }
Task ISendTransport.Send <T>(T message, IPipe <SendContext <T> > pipe, CancellationToken cancellationToken) { IPipe <EventDataSendEndpointContext> clientPipe = Pipe.ExecuteAsync <EventDataSendEndpointContext>(async clientContext => { var context = new EventDataSendContext <T>(message, cancellationToken); try { await pipe.Send(context).ConfigureAwait(false); await _observers.PreSend(context).ConfigureAwait(false); using (var eventData = new EventData(context.Body)) { eventData.Properties.SetTextHeaders(context.Headers, (_, text) => text); // if (context.PartitionKey != null) // eventData.PartitionKey = context.PartitionKey; await clientContext.Send(eventData).ConfigureAwait(false); context.LogSent(); await _observers.PostSend(context).ConfigureAwait(false); } } catch (Exception ex) { await _observers.SendFault(context, ex).ConfigureAwait(false); throw; } }); return(_source.Send(clientPipe, cancellationToken)); }