WCF - Message и MessageBuffer закрываются

Msdn говорит: сообщение также уничтожает объект, который использовался для создания тела, когда оно располагается.

Из этого я делаю вывод, что Message также закрывает MessageBuffer, из которого он создан. Но в реальном коде это не так. Закрытие сообщения оставляет messagebuffer.closed как false.

Как буфер сообщений и сообщения, созданные из этого буфера, должны быть закрыты?

1 ответ

Исходный код ниже поможет вам понять, как использовать сообщение, созданное из буфера сообщений.

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;

namespace _22756512 {
    class Program {
        static void Main(string[] args) {
            Order order = new Order() { Id = 1, CustomerName = "Smith" };
            var message = Message.CreateMessage(MessageVersion.Default, "http://127.0.0.1/someaction", order);
            Console.WriteLine("message.state after creation: " + message.State.ToString());

            using (MessageBuffer buffer = message.CreateBufferedCopy(int.MaxValue)) {
                Console.WriteLine("message.state after create bufferedcopy: " + message.State.ToString());

                using (var anotherMessage = buffer.CreateMessage()) {
                    var anotherOrder = anotherMessage.GetBody<Order>();
                    Console.WriteLine("anotherOrder.Id = " + anotherOrder.Id);
                    Console.WriteLine("antherOrder.customername = " + anotherOrder.CustomerName);
                }

                using (var the3rdMessage = buffer.CreateMessage()) {
                    var the3rdOrder = the3rdMessage.GetBody<Order>();
                    Console.WriteLine("3rd order.id = " + the3rdOrder.Id);
                    Console.WriteLine("3rd order.customer name = " + the3rdOrder.CustomerName);
                }
            }

            message.Close();
            Console.WriteLine("message.state after close: " + message.State.ToString());
            Console.Read();
        }
    }

    public class Order {
        public Int32 Id { get; set; }
        public String CustomerName { get; set; }
    }
}
Другие вопросы по тегам