2014-03-31 3 views
0

Msdn says : 메시지는 또한 처리 될 때 본문을 구성하는 데 사용 된 개체를 처분합니다.WCF - Message 및 MessageBuffer 닫기

내가 Message Message를 닫는 것으로부터 추론 한 것은 MessageBuffer를 닫는 것입니다. 그러나 실제 코드에서는 그렇지 않습니다. 메시지를 닫으면 messagebuffer.closed가 false가됩니다.

해당 버퍼에서 생성 된 메시지 버퍼와 메시지를 닫아야하는 방법은 무엇입니까?

답변

0

아래의 소스 코드는 메시지 버퍼에서 생성 된 메시지를 사용하는 방법을 이해하는 데 도움이됩니다.

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; } 
    } 
} 
+0

내 경우 * 사용 *은 옵션이 아닙니다. 일부 콜백에서 (특히 OperationContext.Current.OperationCompleted에서) dispose/close가 발생해야하기 때문입니다. – rovsen