Пример #1
0
        public void Serialize <T>(Stream stream, SendContext <T> context) where T : class
        {
            try
            {
                context.ContentType = ContentType;

                var envelope = new JsonMessageEnvelope(context, context.Message, EventNamespaceTypeMetadataCache.GetMessageTypes <T>(_messageTypeProvider));

                using (var writer = new StreamWriter(stream, Encoding.Value, 1024, true))
                    using (var jsonWriter = new JsonTextWriter(writer))
                    {
                        jsonWriter.Formatting = Formatting.Indented;

                        Serializer.Value.Serialize(jsonWriter, envelope, typeof(MessageEnvelope));

                        jsonWriter.Flush();
                        writer.Flush();
                    }
            }
            catch (SerializationException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new SerializationException("Failed to serialize message", ex);
            }
        }
 public void Serialize <T>(Stream stream, SendContext <T> context) where T : class
 {
     try
     {
         context.ContentType = JsonMessageSerializer.JsonContentType;
         JsonMessageEnvelope jsonMessageEnvelope = new JsonMessageEnvelope((SendContext)context, (object)context.Message, TypeMetadataCache <T> .MessageTypeNames);
         using (StreamWriter streamWriter = new StreamWriter(stream, JsonMessageSerializer._encoding.Value, 1024, true))
         {
             using (JsonTextWriter jsonTextWriter = new JsonTextWriter((TextWriter)streamWriter))
             {
                 jsonTextWriter.Formatting = Formatting.Indented;
                 JsonMessageSerializer._serializer.Value.Serialize((JsonWriter)jsonTextWriter, (object)jsonMessageEnvelope, typeof(MessageEnvelope));
                 jsonTextWriter.Flush();
                 streamWriter.Flush();
             }
         }
     }
     catch (SerializationException ex)
     {
         throw;
     }
     catch (Exception ex)
     {
         throw new SerializationException("Failed to serialize message", ex);
     }
 }
        public ConsumeContext Deserialize(ReceiveContext receiveContext)
        {
            var body                  = Encoding.UTF8.GetString(receiveContext.GetBody());
            var customMessage         = JsonConvert.DeserializeObject <CustomMessage>(body);
            var serviceBusSendContext = new AzureServiceBusSendContext <CustomMessage>(customMessage, CancellationToken.None);

            string[] messageTypes      = { "urn:message:MassTransitSample:CustomMessage" };
            var      serviceBusContext = receiveContext as ServiceBusReceiveContext;

            serviceBusSendContext.ContentType   = new ContentType(JsonMessageSerializer.JsonContentType.ToString());
            serviceBusSendContext.SourceAddress = serviceBusContext.InputAddress;
            serviceBusSendContext.SessionId     = serviceBusContext.SessionId;

            // sending JToken because we are using default Newtonsoft deserializer/serializer
            var messageEnv = new JsonMessageEnvelope(serviceBusSendContext, JObject.Parse(body), messageTypes);

            return(new JsonConsumeContext(JsonSerializer.CreateDefault(), receiveContext, messageEnv));
        }
        public async Task Should_create_the_brokered_message_receiver()
        {
            var message = new Mock <Message>();

            message.Object.ContentType = JsonMessageSerializer.ContentTypeHeaderValue;
            message.Object.MessageId   = NewId.NextGuid().ToString();

            using (var stream = new MemoryStream())
            {
                ServiceBusSendContext <PingMessage> context = new AzureServiceBusSendContext <PingMessage>(new PingMessage(), CancellationToken.None);

                var envelope = new JsonMessageEnvelope(context, context.Message, TypeMetadataCache <PingMessage> .MessageTypeNames);

                using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
                    using (var jsonWriter = new JsonTextWriter(writer))
                    {
                        jsonWriter.Formatting = Formatting.Indented;

                        JsonMessageSerializer.Serializer.Serialize(jsonWriter, envelope, typeof(MessageEnvelope));

                        jsonWriter.Flush();
                        writer.Flush();
                    }

                message.Object.Body = stream.ToArray();
            }

            var binder = new Mock <IBinder>();

            LogContext.ConfigureCurrentLogContext();

            var handler = Bus.Factory.CreateBrokeredMessageReceiver(binder.Object, LogContext.Current.Logger, cfg =>
            {
                cfg.InputAddress = new Uri("sb://masstransit-build.servicebus.windows.net/input-queue");

                cfg.UseRetry(x => x.Intervals(10, 100, 500, 1000));
                cfg.Consumer(() => new Consumer());
            });

            Console.WriteLine(handler.GetProbeResult().ToJsonString());

            //            await handler.Handle(message.Object);
        }
        public ConsumeContext Deserialize(ReceiveContext receiveContext)
        {
            var body                  = Encoding.UTF8.GetString(receiveContext.GetBody());
            var customMessage         = JsonConvert.DeserializeObject <EventGridEvent>(body);
            var serviceBusSendContext = new AzureServiceBusSendContext <EventGridEvent>(customMessage, CancellationToken.None);

            // this is the default scheme, that has to match in order messages to be processed
            // EventGrid messages type of EventGridEvent within namespace Microsoft.Azure.EventGrid.Models
            string[] messageTypes      = { "urn:message:Microsoft.Azure.EventGrid.Models:EventGridEvent" };
            var      serviceBusContext = receiveContext as ServiceBusReceiveContext;

            serviceBusSendContext.ContentType   = new ContentType(JsonMessageSerializer.JsonContentType.ToString());
            serviceBusSendContext.SourceAddress = serviceBusContext.InputAddress;
            serviceBusSendContext.SessionId     = serviceBusContext.SessionId;

            // sending JToken because we are using default Newtonsoft deserializer/serializer
            var messageEnv = new JsonMessageEnvelope(serviceBusSendContext, JObject.Parse(body), messageTypes);

            return(new JsonConsumeContext(JsonSerializer.CreateDefault(), receiveContext, messageEnv));
        }
Пример #6
0
        public MessageEnvelope GetMessageEnvelope()
        {
            var envelope = new JsonMessageEnvelope(this, Message, TypeMetadataCache <T> .MessageTypeNames);

            return(envelope);
//            var message = new JsonSerializedMessage();
//
//            if (CorrelationId.HasValue)
//                message.CorrelationId = CorrelationId.Value.ToString();
//            if (ConversationId.HasValue)
//                message.CorrelationId = ConversationId.Value.ToString();
//            if (InitiatorId.HasValue)
//                message.CorrelationId = InitiatorId.Value.ToString();
//            if (RequestId.HasValue)
//                message.CorrelationId = RequestId.Value.ToString();
//            if (TimeToLive.HasValue)
//                message.ExpirationTime = JsonConvert.ToString(DateTime.UtcNow + TimeToLive);
//
//            byte[] body = Body;
//
//            message.Body = Encoding.UTF8.GetString(body);
//
//            return message;
        }
        public void Serialize <T>(Stream stream, SendContext <T> context)
            where T : class
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            context.ContentType = EncryptedMessageSerializer.EncryptedContentType;
            var jsonMessageEnvelope = new JsonMessageEnvelope(context, context.Message, TypeMetadataCache <T> .MessageTypeNames);

            using (var transform = this.CreateAndSetEncryptionContext(context.Headers, context.CancellationToken).ConfigureAwait(false).GetAwaiter().GetResult())
                using (var encryptStream = new DisposingCryptoStream(stream, transform, CryptoStreamMode.Write))
                    using (var bsonWriter = new BsonDataWriter(encryptStream))
                    {
                        this.serializer.Serialize(bsonWriter, jsonMessageEnvelope, typeof(MessageEnvelope));
                        bsonWriter.Flush();
                    }
        }
        public MessageEnvelope GetMessageEnvelope()
        {
            var envelope = new JsonMessageEnvelope(this, Message, TypeMetadataCache <T> .MessageTypeNames);

            return(envelope);
        }