0
Msdn says: 消息還處置用於構建物體時使用的對象。WCF - 消息和消息緩衝區關閉
從這我推斷是關閉消息也關閉它創建的MessageBuffer。但在實際的代碼中,情況並非如此。關閉消息會將messagebuffer.closed留爲false。
應如何關閉從該緩衝區創建的消息緩衝區和消息?
Msdn says: 消息還處置用於構建物體時使用的對象。WCF - 消息和消息緩衝區關閉
從這我推斷是關閉消息也關閉它創建的MessageBuffer。但在實際的代碼中,情況並非如此。關閉消息會將messagebuffer.closed留爲false。
應如何關閉從該緩衝區創建的消息緩衝區和消息?
下面的源代碼將幫助您瞭解如何使用從消息緩衝區創建的消息。
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; }
}
}
在我的情況*使用*不是一個選項。因爲dispose/close應該在某個回調中發生(特別是在OperationContext.Current.OperationCompleted中)。 – rovsen