다음을 통해 공유


메시지 serialization

업데이트: 2007년 11월

serialization은 개체를 가져와서 상태 정보를 저장하거나 전송할 수 있는 형태로 변환하는 과정입니다. serialization의 기본 개념은 개체가 현재 상태를 영구 저장소에 쓸 수 있어야 한다는 것입니다. 일반적으로 개체의 상태는 멤버 변수의 값으로 나타냅니다. 나중에 저장소에서 개체의 상태를 읽거나 deserialize하여 개체를 다시 만들 수 있습니다. serialization은 개체를 serialize할 때 사용되는 개체 포인터 및 개체에 대한 순환 참조 정보를 모두 처리합니다.

메시지 큐 기능에서 serialization은 특히 개체나 데이터 집합을 큐로 보낼 수 있는 메시지로 변환한 다음 큐에서 검색한 메시지를 다시 응용 프로그램에서 처리할 수 있는 개체나 데이터로 변환하는 과정을 의미합니다.

Visual Studio 또는 .NET Framework 응용 프로그램에서는 포맷터 객체가 메시지 serialization을 처리합니다. 메시지가 큐로 보내지면 포맷터는 개체를 메시지 큐로 보낼 수 있는 스트림으로 serialize합니다. 큐에서 메시지를 읽을 때 포맷터는 메시지 데이터를 Body 속성으로 deserialize합니다.

송수신할 데이터 종류에 따라 적절한 포맷터 형식을 선택합니다. Visual Studio와 .NET Framework에서는 다음과 같이 각각 다른 형식의 데이터를 유지하고 제거할 수 있도록 설계된 미리 정의된 세 가지 포맷터를 제공합니다.

  • XmlMessageFormatter는 사람이 읽을 수 있는 XML 문자열을 사용하여 개체 및 기본 데이터 형식과 메시지 사이의 전환을 수행합니다. 이것은 MessageQueue 구성 요소에 대한 기본 포맷터 설정입니다.

  • BinaryMessageFormatter 개체는 한 개 이상의 연결된 개체를 serialize된 스트림으로 유지합니다. 따라서 매우 간결하고 빠르게 구문 분석을 할 수 있지만 사람이 읽을 수는 없습니다.

  • ActiveXMessageFormatter 개체는 기본 데이터 형식을 유지하며 따라서 이전 버전의 메시지 큐를 사용하는 구성 요소와 상호 운용이 가능합니다. 최종 serialization은 매우 간결합니다. 이 포맷터는 Windows를 염두에 두고 설계되었으며 사람이 읽을 수 없습니다. 그러나 매우 빠른 serialization 방법입니다.

기본적으로 XmlMessageFormatterMessageQueue 구성 요소의 인스턴스를 만들 때 자동으로 만들어지며 이 인스턴스와 연관됩니다. MessageQueue 인스턴스에서 Send 메서드가 호출되면 메시지의 본문이 이 포맷터를 사용하여 serialize됩니다. 전송 작업 중에 포맷터를 사용하기 위해 추가 코드를 작성할 필요가 없습니다.

메시지를 읽는 것은 약간 더 복잡합니다. 포맷터를 사용하여 메시지를 읽으려면 메시지의 본문이 처리되는 방법을 나타내는 속성을 설정해야 합니다. XmlMessageFormatter 개체를 사용할 때는 TargetTypes 또는 TargetTypeNames 속성을 설정합니다. BinaryMessageFormatter 개체를 사용할 때는 서로 다른 일련의 속성을 설정합니다. ActiveXMessageFormatter 개체에는 연결된 속성이 없습니다. 자세한 내용은 메시지 읽기 및 받기를 참조하십시오.

Visual Studio와 .NET Framework에서 제공하는 포맷터를 사용하는 것 외에 다른 데이터 형식을 사용해야 하는 경우 직접 포맷터를 만들 수도 있습니다. 자신의 포맷터를 프로젝트로 가져와서 코드를 통해 액세스할 수 있습니다.

작업 중인 큐, 메시지 또는 MessageQueue 구성 요소의 Formatter 속성을 설정하는 방식으로 사용할 포맷터를 선택합니다.

XML 메시지 형식 지정의 장점

XML 포맷터의 장점 중 하나는 개체나 데이터가 serialize될 때 생성되는 문자열을 읽을 수 있다는 점입니다. 따라서 예상치 못한 일이 발생하여 메시지 큐에서 메시지를 삭제할 수 없는 경우 메시지 자체를 보고 문제를 해결할 수 있습니다.

또 다른 장점은 이 포맷터를 사용하여 메시지를 serialize할 경우 동일한 포맷터 개체로 deserialize할 필요가 없다는 점입니다. 즉, 두 프로그램에서 모두 데이터 스키마를 인지하고 있는 경우 수신자의 포맷터 클래스가 송신자의 포맷터 클래스와 동일할 필요가 없습니다. 또한 XML 포맷터로 serialize된 메시지는 반드시 deserialize될 필요가 없습니다. 대부분의 브라우저와 기타 XML 뷰어에서는 XML 메시지 구문을 분석할 수 있습니다.

참고 항목

작업

방법: MessageQueue 구성 요소 인스턴스 만들기

기타 리소스

메시지 보내기 및 Serialization