void SendMessage()
        {
            var context = new SendContext <DeleteMessage>(new DeleteMessage());

            context.SetBodyWriter(stream => _serializer.Serialize(stream, context));

            _transport.Send(context);
        }
        public void TransportSendAndReceive()
        {
            using (var management = new RabbitMqEndpointManagement(_queue))
            {
                management.BindQueue(_queue.Name, _exchange.Name, ExchangeType.Fanout, "", null);
            }

            IOutboundTransport t = _factory.BuildOutbound(new TransportSettings(_exchange));
            var context          = new SendContext <string>("dru");

            context.SetBodyWriter(stream =>
            {
                byte[] buffer = Encoding.UTF8.GetBytes(context.Message);
                stream.Write(buffer, 0, buffer.Length);
            });
            t.Send(context);

            IInboundTransport i = _factory.BuildInbound(new TransportSettings(_queue));

            i.Receive(s =>
            {
                return(ss =>
                {
                    string name;
                    using (var stream = new MemoryStream())
                    {
                        ss.CopyBodyTo(stream);

                        name = Encoding.UTF8.GetString(stream.ToArray());
                    }

                    Assert.AreEqual("dru", name);
                    Console.WriteLine(name);
                });
            }, 1.Minutes());
        }
Example #3
0
        public static void QueueMessage <T>(T message) where T : class
        {
            string localQueueName = new Uri(QueueName).GetLocalName();

            ISendContext <T> sc = new SendContext <T>(message);
            var messageEnvelope = Envelope.Create(sc);

            messageEnvelope.DestinationAddress = QueueName;

            /* using (var mq = new System.Messaging.MessageQueue(localQueueName))
             * {
             *  mq.Send(messageEnvelope);
             *
             * }
             */

            var msmqMessage = new Message();

            try
            {
                if (!string.IsNullOrEmpty(sc.MessageType))
                {
                    msmqMessage.Label = sc.MessageType.Length > 250 ? sc.MessageType.Substring(0, 250) : sc.MessageType;
                }

                msmqMessage.Recoverable        = false;
                msmqMessage.UseDeadLetterQueue = true;

                if (sc.ExpirationTime.HasValue)
                {
                    DateTime dateTime = sc.ExpirationTime.Value;
                    msmqMessage.TimeToBeReceived = dateTime.Kind == DateTimeKind.Utc
                                                       ? dateTime - SystemUtil.UtcNow
                                                       : dateTime - SystemUtil.Now;
                }

                var serializer = new XmlMessageSerializer();

                // (Action<Stream>)(stream => serializer.Serialize<T>(stream, sc))

                sc.SetBodyWriter(stream => serializer.Serialize(stream, sc));
                sc.SerializeTo(msmqMessage.BodyStream);

                // msmqMessage.Body = messageEnvelope;

                var transportMessageHeaders = new TransportMessageHeaders();

                if (!string.IsNullOrEmpty(sc.ContentType))
                {
                    transportMessageHeaders.Add("Content-Type", sc.ContentType);
                }

                if (!string.IsNullOrEmpty(sc.OriginalMessageId))
                {
                    transportMessageHeaders.Add("Original-Message-Id", sc.OriginalMessageId);
                }

                msmqMessage.Extension = transportMessageHeaders.GetBytes();

                using (var mq = new MessageQueue(localQueueName))
                {
                    mq.Send(msmqMessage, MessageQueueTransactionType.None);
                }
            }
            finally
            {
                msmqMessage.Dispose();
            }
        }
        public void TransportSendAndReceive()
        {
            using (var management = new RabbitMqEndpointManagement(_queue))
            {
                management.BindQueue(_queue.Name, _exchange.Name, ExchangeType.Fanout, "", null);
            }

            IOutboundTransport t = _factory.BuildOutbound(new TransportSettings(_exchange));
            var context = new SendContext<string>("dru");
            context.SetBodyWriter(stream =>
                {
                    byte[] buffer = Encoding.UTF8.GetBytes(context.Message);
                    stream.Write(buffer, 0, buffer.Length);
                });
            t.Send(context);

            IInboundTransport i = _factory.BuildInbound(new TransportSettings(_queue));

            i.Receive(s =>
                {
                    return ss =>
                        {
                            string name;
                            using (var stream = new MemoryStream())
                            {
                                ss.CopyBodyTo(stream);

                                name = Encoding.UTF8.GetString(stream.ToArray());
                            }

                            Assert.AreEqual("dru", name);
                            Console.WriteLine(name);
                        };
                }, 1.Minutes());
        }