Beispiel #1
0
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            if (context.TryGetIncomingMessage(out var incomingMessage))
            {
                // do something with the incoming message
            }

            if (context.TryGetIncomingHeaders(out var incomingHeaders))
            {
                // do something with the incoming headers
            }

            // the outgoing message
            var outgoingMessage = context.OutgoingMessage;

            // the bytes containing the serialized outgoing messages.
            var bytes = context.OutgoingBody;

            // optionally replace the Body.
            // this can be done using any information from the context
            context.OutgoingBody = ServiceThatChangesBody.Mutate(context.OutgoingMessage);

            // the outgoing headers
            var headers = context.OutgoingHeaders;

            // optional manipulate headers

            // add a header
            headers.Add("MyHeaderKey1", "MyHeaderValue");

            // remove a header
            headers.Remove("MyHeaderKey2");

            return(Task.CompletedTask);
        }
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            var headers = context.OutgoingHeaders;

            headers["NServiceBus.EnclosedMessageTypes"] = $"{context.OutgoingMessage.GetType().Name}";
            return(Task.CompletedTask);
        }
        async Task InvokeOutgoingTransportMessageMutators(IOutgoingPhysicalMessageContext context, Func <IOutgoingPhysicalMessageContext, Task> next)
        {
            var outgoingMessage = context.Extensions.Get <OutgoingLogicalMessage>();

            LogicalMessage incomingLogicalMessage;

            context.Extensions.TryGet(out incomingLogicalMessage);

            IncomingMessage incomingPhysicalMessage;

            context.Extensions.TryGet(out incomingPhysicalMessage);

            var mutatorContext = new MutateOutgoingTransportMessageContext(
                context.Body,
                outgoingMessage.Instance,
                context.Headers,
                incomingLogicalMessage?.Instance,
                incomingPhysicalMessage?.Headers);

            foreach (var mutator in context.Builder.BuildAll <IMutateOutgoingTransportMessages>())
            {
                await mutator.MutateOutgoing(mutatorContext)
                .ThrowIfNull()
                .ConfigureAwait(false);
            }

            if (mutatorContext.MessageBodyChanged)
            {
                context.UpdateMessage(mutatorContext.OutgoingBody);
            }

            await next(context).ConfigureAwait(false);
        }
            public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
            {
                var currentIdentity = Thread.CurrentPrincipal.Identity;

                context.OutgoingHeaders["WinIdName"] = currentIdentity.Name;
                return(Task.FromResult(0));
            }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     context.OutgoingHeaders["HeaderSetByMutator"]         = "some value";
     context.OutgoingHeaders[Headers.EnclosedMessageTypes] = typeof(MessageThatMutatorChangesTo).FullName;
     context.OutgoingBody = Encoding.UTF8.GetBytes("<MessageThatMutatorChangesTo><SomeProperty>SomeValue</SomeProperty></MessageThatMutatorChangesTo>");
     return(Task.FromResult(0));
 }
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        var headers = context.OutgoingHeaders;

        headers["MutateOutgoingTransportMessages"] = "ValueMutateOutgoingTransportMessages";
        return(Task.CompletedTask);
    }
Beispiel #7
0
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        var headers = context.OutgoingHeaders;

        headers["MutateOutgoingTransportMessages"] = "ValueMutateOutgoingTransportMessages";
        return(Task.FromResult(0));
    }
Beispiel #8
0
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        var bodyAsString = Encoding.UTF8
                           .GetString(context.OutgoingBody);

        log.Info($"Serialized Message Body:\r\n{bodyAsString}");
        return(Task.CompletedTask);
    }
Beispiel #9
0
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            var headers = context.OutgoingHeaders;

            headers.Add(Headers.TimeToBeReceived, TimeSpan.MaxValue.ToString());
            headers.Add(Headers.NonDurableMessage, false.ToString());

            return(Task.CompletedTask);
        }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     Assert.IsNotEmpty(context.OutgoingHeaders);
     Assert.IsNotNull(context.OutgoingBody);
     context.TryGetIncomingHeaders(out var incomingHeaders);
     context.TryGetIncomingMessage(out var incomingMessage);
     Assert.IsNotEmpty(incomingHeaders);
     Assert.IsNotNull(incomingMessage);
     return(Task.FromResult(0));
 }
Beispiel #11
0
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        if (principalAccessor.CurrentPrincipal?.Identity.Name != null)
        {
            log.Info("Adding CurrentPrincipal user to headers");
            context.OutgoingHeaders["UserName"] = principalAccessor.CurrentPrincipal.Identity.Name;
        }

        return(Task.CompletedTask);
    }
                public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
                {
                    Assert.IsNotEmpty(context.OutgoingHeaders);
                    Assert.IsNotNull(context.OutgoingBody);
                    IReadOnlyDictionary <string, string> incomingHeaders;

                    context.TryGetIncomingHeaders(out incomingHeaders);
                    object incomingmessage;

                    context.TryGetIncomingMessage(out incomingmessage);
                    Assert.IsNotEmpty(incomingHeaders);
                    Assert.IsNotNull(incomingmessage);
                    return(Task.FromResult(0));
                }
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            if (context == null)
            {
                return(Task.CompletedTask);
            }
            if (!context.TryGetIncomingHeaders(out var incomingHeaders))
            {
                return(Task.CompletedTask);
            }

            var incomingHeadersOfInterest = incomingHeaders.Where(h => MetaDataConstants.AllConstants.Contains(h.Key));

            context.OutgoingHeaders.AddHeadersIfDoNotExist(incomingHeadersOfInterest);

            return(Task.CompletedTask);
        }
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        log.Info($"transportMessage.Body size before compression: {context.OutgoingBody.Length}");

        var mStream   = new MemoryStream(context.OutgoingBody);
        var outStream = new MemoryStream();

        using (var tinyStream = new GZipStream(outStream, CompressionMode.Compress))
        {
            mStream.CopyTo(tinyStream);
        }
        // copy the compressed buffer only after the GZipStream is disposed,
        // otherwise, not all the compressed message will be copied.
        context.OutgoingBody = outStream.ToArray();
        context.OutgoingHeaders["IWasCompressed"] = "true";
        log.Info($"transportMessage.Body size after compression: {context.OutgoingBody.Length}");
        return(Task.CompletedTask);
    }
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        logger.InfoFormat("transportMessage.Body size before compression: {0}", context.OutgoingBody.Length);

        MemoryStream mStream   = new MemoryStream(context.OutgoingBody);
        MemoryStream outStream = new MemoryStream();

        using (GZipStream tinyStream = new GZipStream(outStream, CompressionMode.Compress))
        {
            mStream.CopyTo(tinyStream);
        }
        // copy the compressed buffer only after the GZipStream is disposed,
        // otherwise, not all the compressed message will be copied.
        context.OutgoingBody = outStream.ToArray();
        context.OutgoingHeaders["IWasCompressed"] = "true";
        logger.InfoFormat("transportMessage.Body size after compression: {0}", context.OutgoingBody.Length);
        return(Task.FromResult(0));
    }
Beispiel #16
0
        async Task InvokeOutgoingTransportMessageMutators(IOutgoingPhysicalMessageContext context, Func <IOutgoingPhysicalMessageContext, Task> next)
        {
            var outgoingMessage = context.Extensions.Get <OutgoingLogicalMessage>();

            context.Extensions.TryGet(out LogicalMessage incomingLogicalMessage);
            context.Extensions.TryGet(out IncomingMessage incomingPhysicalMessage);

            var mutatorContext = new MutateOutgoingTransportMessageContext(
                context.Body,
                outgoingMessage.Instance,
                context.Headers,
                incomingLogicalMessage?.Instance,
                incomingPhysicalMessage?.Headers,
                context.CancellationToken);

            var hasMutators = false;

            foreach (var mutator in context.Builder.GetServices <IMutateOutgoingTransportMessages>())
            {
                hasMutators = true;

                await mutator.MutateOutgoing(mutatorContext)
                .ThrowIfNull()
                .ConfigureAwait(false);
            }

            foreach (var mutator in mutators)
            {
                hasMutators = true;

                await mutator.MutateOutgoing(mutatorContext)
                .ThrowIfNull()
                .ConfigureAwait(false);
            }

            hasOutgoingTransportMessageMutators = hasMutators;

            if (mutatorContext.MessageBodyChanged)
            {
                context.UpdateMessage(mutatorContext.OutgoingBody);
            }

            await next(context).ConfigureAwait(false);
        }
Beispiel #17
0
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            // TODO Log when debug is enabled

            var outgoingHeaders = context.OutgoingHeaders;

            var tenantId             = (_session.TenantId != null) ? _session.TenantId.Value.ToString() : "0";
            var impersonatorTenantId = (_session.ImpersonatorTenantId != null) ? _session.ImpersonatorTenantId.Value.ToString() : string.Empty;
            var userId             = (_session.UserId != null) ? _session.UserId.Value.ToString() : "0";
            var impersonatorUserId = (_session.ImpersonatorUserId != null) ? _session.ImpersonatorUserId.Value.ToString() : string.Empty;

            outgoingHeaders.Add(MessageHeaders.TenantId, tenantId);
            outgoingHeaders.Add(MessageHeaders.UserId, userId);

            outgoingHeaders.Add(MessageHeaders.ImpersonatorTenantId, impersonatorTenantId);
            outgoingHeaders.Add(MessageHeaders.ImpersonatorUserId, impersonatorUserId);

            return(Task.FromResult(0));
        }
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            object incomingMessage;

            if (context.TryGetIncomingMessage(out incomingMessage))
            {
                // do something with the incoming message
            }

            IReadOnlyDictionary <string, string> incomingHeaders;

            if (context.TryGetIncomingHeaders(out incomingHeaders))
            {
                // do something with the incoming headers
            }

            // the outgoing message
            object outgoingMessage = context.OutgoingMessage;

            // the bytes containing the serialized outgoing messages.
            byte[] bytes = context.OutgoingBody;

            // optionally replace the Body.
            // this can be done using any information from the context
            context.OutgoingBody = ServiceThatChangesBody.Mutate(context.OutgoingMessage);


            // the outgoing headers
            IDictionary <string, string> headers = context.OutgoingHeaders;

            // optional manipulate headers

            // add a header
            headers.Add("MyHeaderKey1", "MyHeaderValue");

            // remove a header
            headers.Remove("MyHeaderKey2");

            return(Task.FromResult(0));
        }
    public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
    {
        var exceedsCompressionThresshold = context.OutgoingBody.Length > CompressThresshold;

        if (!exceedsCompressionThresshold)
        {
            if (IsDebugEnabled)
            {
                Log.Debug("Skip compression, not exceeding compression thresshold.");
            }
            return(TaskEx.CompletedTask);
        }

        var uncompressedBodyStream = new MemoryStream(context.OutgoingBody, false);
        var compressedBodyStream   = new MemoryStream();

        using (var compressionStream = new GZipStream(compressedBodyStream, CompressionLevel))
        {
            uncompressedBodyStream.CopyTo(compressionStream);
        }

        var compressedBody = compressedBodyStream.ToArray();

        if (IsDebugEnabled)
        {
            Log.DebugFormat("Uncompressed: {0:N0}, Compressed: {1:N0} ({2:N})", context.OutgoingBody.Length, compressedBody.Length, 100D * compressedBody.Length / context.OutgoingBody.Length);
        }

        if (compressedBody.Length > context.OutgoingBody.Length)
        {
            Log.InfoFormat("Compression didn't save any bytes, ignoring. Consider raising the current compression thresshold of {0:N0} bytes.", CompressThresshold);
            return(TaskEx.CompletedTask);
        }

        context.OutgoingBody = compressedBody;
        context.OutgoingHeaders[HeaderKey] = HeaderValue;
        return(TaskEx.CompletedTask);
    }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     context.OutgoingHeaders["test_token"] = HttpContext.Current.Request.Params["test_token"];
     return(Task.FromResult(0));
 }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     log.Info("Adding Thread.CurrentPrincipal user to headers");
     context.OutgoingHeaders["UserName"] = Thread.CurrentPrincipal.Identity.Name;
     return(Task.FromResult(0));
 }
Beispiel #22
0
        public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
        {
            context.OutgoingBody = context.OutgoingBody.Reverse().ToArray();

            return(Task.FromResult(false));
        }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     context.OutgoingBody[0]--;
     return(Task.FromResult(0));
 }
Beispiel #24
0
 public async Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     context.OutgoingHeaders["MyCustomHeader"] = "My custom value";
 }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     context.OutgoingHeaders["MyCustomHeader"] = "My custom value";
     return(Task.CompletedTask);
 }
Beispiel #26
0
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     return(Task.CompletedTask);
 }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     return(null);
 }
            public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
            {
                context.OutgoingBody = new byte[0];

                return(TaskEx.CompletedTask);
            }
            public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
            {
                MutateOutgoingCalled = true;

                return(TaskEx.CompletedTask);
            }
Beispiel #30
0
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     context.OutgoingBody = context.OutgoingBody.Reverse().ToArray();
     return(Task.CompletedTask);
 }
            public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
            {
                MutateOutgoingCalled = true;

                return TaskEx.CompletedTask;
            }
 public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
 {
     return null;
 }
            public Task MutateOutgoing(MutateOutgoingTransportMessageContext context)
            {
                context.OutgoingBody = new byte[0];

                return TaskEx.CompletedTask;
            }