Поделиться через


Message Класс

Определение

Представляет логическую единицу взаимодействия между конечными точками в распределенной среде.

public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
    interface IDisposable
Public MustInherit Class Message
Implements IDisposable
Наследование
Message
Реализации

Примеры

В следующем примере кода показан клиент, использующий фабрику каналов для отправки сообщения и чтения ответа.

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

namespace ConsoleApplication1
{
    class client
    {

        static void RunClient()
        {
            //Step1: create a binding with just HTTP
            CustomBinding binding = new CustomBinding();
            binding.Elements.Add(new HttpTransportBindingElement());
            //Step2: use the binding to build the channel factory
            IChannelFactory<IRequestChannel> factory =
            binding.BuildChannelFactory<IRequestChannel>(
                             new BindingParameterCollection());
            //open the channel factory
            factory.Open();
            //Step3: use the channel factory to create a channel
            IRequestChannel channel = factory.CreateChannel(
               new EndpointAddress("http://localhost:8080/channelapp"));
            channel.Open();
            //Step4: create a message
            Message requestmessage = Message.CreateMessage(
                MessageVersion.Soap12WSAddressing10,
                "http://contoso.com/someaction",
                 "This is the body data");
            //send message
            Message replymessage = channel.Request(requestmessage);
            Console.WriteLine("Reply message received");
            Console.WriteLine("Reply action: {0}",
                                  replymessage.Headers.Action);
            string data = replymessage.GetBody<string>();
            Console.WriteLine("Reply content: {0}", data);
            //Step5: don't forget to close the message
            requestmessage.Close();
            replymessage.Close();
            //don't forget to close the channel
            channel.Close();
            //don't forget to close the factory
            factory.Close();
        }
        public static void Main()
        {
            Console.WriteLine("Press [ENTER] when service is ready");
            Console.ReadLine();
            RunClient();
            Console.WriteLine("Press [ENTER] to exit");
            Console.ReadLine();
        }
    }
}


Imports System.Collections.Generic
Imports System.Text
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Runtime.Serialization

Namespace ConsoleApplication1
    Friend Class client


        Private Shared Sub RunClient()
            'Step1: create a binding with just HTTP
            Dim binding As New CustomBinding()
            binding.Elements.Add(New HttpTransportBindingElement())
            'Step2: use the binding to build the channel factory
            Dim factory As IChannelFactory(Of IRequestChannel) = binding.BuildChannelFactory(Of IRequestChannel)(New BindingParameterCollection())
            'open the channel factory
            factory.Open()
            'Step3: use the channel factory to create a channel
            Dim channel As IRequestChannel = factory.CreateChannel(New EndpointAddress("http://localhost:8080/channelapp"))
            channel.Open()
            'Step4: create a message
            Dim requestmessage As Message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "http://contoso.com/someaction", "This is the body data")
            'send message
            Dim replymessage As Message = channel.Request(requestmessage)
            Console.WriteLine("Reply message received")
            Console.WriteLine("Reply action: {0}", replymessage.Headers.Action)
            Dim data = replymessage.GetBody(Of String)()
            Console.WriteLine("Reply content: {0}", data)
            'Step5: don't forget to close the message
            requestmessage.Close()
            replymessage.Close()
            'don't forget to close the channel
            channel.Close()
            'don't forget to close the factory
            factory.Close()
        End Sub
        Public Shared Sub Main()
            Console.WriteLine("Press [ENTER] when service is ready")
            Console.ReadLine()
            RunClient()
            Console.WriteLine("Press [ENTER] to exit")
            Console.ReadLine()
        End Sub
    End Class
End Namespace

Комментарии

Класс Message предоставляет средства передачи произвольной информации от отправителя получателю по сети. Он может использоваться для трансляции информации, предложения или запроса действий или запроса данных.

Структура объекта Message представляет конверт SOAP. Она состоит из двух отдельных частей: текста сообщения и дополнительной коллекции заголовков, представленной классом Headers. Содержимое сообщения — это определяемые приложением данные, которые передаются от отправителя получателю. Заголовки сообщения обеспечивают расширяемость системы и приложения для обеспечения соответствия изменяющимся требованиям, поскольку пользователь может определять код, обрабатывающий указанные заголовки. Также можно определять собственные заголовки. Заголовки сообщения сериализуются и десериализуются вместе с содержимым сообщения.

Сообщения принимаются и отправляются в определенных форматах. Предусмотрена поддержка двух форматов: стандартный текстовый XML-формат и формат двоичных данных XML. Объект Message может использоваться для представления конвертов SOAP версий 1.1 и 1.2. Обратите внимание, что экземпляр класса Message при создании фиксируется и привязывается к определенной версии SOAP. Версия SOAP, используемая для обработки сообщения, представлена свойством Version.

Объект Message может быть сериализован во внешнее хранилище с помощью метода WriteMessage. Свойства сообщения также могут сериализовываться, но они должны идентифицироваться и сериализовываться по отдельности. Десериализация сообщения для создания объекта Message в памяти выполняется с помощью метода CreateMessage. Свойства десериализуются по отдельности и добавляются в коллекцию свойств указанного экземпляра класса Message вручную.

Размер объекта Message устанавливается равным объему передаваемых данных. Текст каждого сообщения моделируется как экземпляр класса XmlReader без заранее установленного ограничения размера потока, оболочку для которого создает объект XmlReader. В то же время поставщики определенных каналов могут устанавливать ограничения размера обрабатываемых сообщений.

В объект Message могут быть добавлены полезные сведения, созданные сущностью, которая проанализировала и обработала сообщение. Эта функциональность обеспечивается свойствами Headers и Properties. Коллекция Headers представляет набор SOAP-заголовков сообщения.

Свойство Properties представляет набор заметок уровня обработки сообщения. Поскольку информация, содержащаяся в заголовках, передается по сети, сущность, которая анализирует заголовок, должна поддерживать основные версии протоколов, используемых для обработки заголовков. Свойства представляют собой менее зависимый от версий способ создания заметок для сообщения.

Для создания экземпляра класса Message используйте один из методов CreateMessage.

Рекомендуется, чтобы объект-получатель сообщения всегда вызывал метод Close по окончании обработки содержимого сообщения. При этом освобождаются ограниченные ресурсы системы (например, сокеты, именованные каналы), которые связаны с временем существования сообщения.

Особое примечание для пользователей управляемого кода C++, создающих классы, унаследованные от данного.

  • Поместите код очистки в блок (On)(Begin)Close (или OnAbort), а не в деструктор.

  • Избегайте использования деструкторов, поскольку они приводят к тому, что компилятор автоматически создает IDisposable.

  • Избегайте использования нессылочных членов, поскольку они приводят к тому, что компилятор автоматически создает IDisposable.

  • Избегайте использования методов завершения. При включении этого метода необходимо подавить предупреждение построения и вызвать метод SuppressFinalize(Object) и сам метод завершения из блока (On)(Begin)Close (или OnAbort) для эмуляции автоматического поведения IDisposable.

Примечания для тех, кто реализует этот метод

При наследовании от класса Message необходимо переопределить следующие члены: Headers и Version.

Конструкторы

Message()

Инициализирует новый экземпляр класса Message.

Свойства

Headers

При переопределении в производном классе возвращает заголовки сообщения.

IsDisposed

Возвращает значение, указывающее, удален ли объект Message.

IsEmpty

Возвращает значение, указывающее, пуст ли объект Message.

IsFault

Получает значение, указывающее, привело ли данное сообщение к созданию ошибок SOAP.

Properties

При переопределении в производном классе получает набор заметок к сообщению уровня обработки.

State

Возвращает текущее состояние этой сущности Message.

Version

При переопределении в производном классе возвращает версию SOAP сообщения.

Методы

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Начинает асинхронную запись содержимого текста сообщения.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Начинает асинхронную запись всего сообщения.

Close()

Закрывает объект Message и освобождает все ресурсы.

CreateBufferedCopy(Int32)

Сохраняет весь объект Message в буфере в памяти для доступа в дальнейшем.

CreateMessage(MessageVersion, FaultCode, String, Object, String)

Создает сообщение, в котором содержится ошибка SOAP, причина ошибки, подробные сведения об ошибке, версия и действие.

CreateMessage(MessageVersion, FaultCode, String, String)

Создает сообщение, в котором содержится ошибка SOAP, причина ошибки, версия и действие.

CreateMessage(MessageVersion, MessageFault, String)

Создает сообщение, в котором содержится ошибка SOAP, версия и действие.

CreateMessage(MessageVersion, String)

Создает сообщение, в котором содержится версия и действие.

CreateMessage(MessageVersion, String, BodyWriter)

Создает сообщение с текстом, содержащим массив байтов.

CreateMessage(MessageVersion, String, Object)

Создает сообщение с указанными версией, действием и текстом.

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

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

CreateMessage(MessageVersion, String, XmlDictionaryReader)

Создает сообщение с указанными версией, действием и текстом.

CreateMessage(MessageVersion, String, XmlReader)

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

CreateMessage(XmlDictionaryReader, Int32, MessageVersion)

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

CreateMessage(XmlReader, Int32, MessageVersion)

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

EndWriteBodyContents(IAsyncResult)

Завершает асинхронную запись содержимого текста сообщения.

EndWriteMessage(IAsyncResult)

Завершает асинхронную запись всего сообщения.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetBody<T>()

Извлекает текст данного экземпляра Message.

GetBody<T>(XmlObjectSerializer)

Извлекает текст данного экземпляра Message с использованием указанного сериализатора.

GetBodyAttribute(String, String)

Извлекает атрибуты текста сообщения.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetReaderAtBodyContents()

Возвращает средство чтения словаря XML, обеспечивающее доступ к содержимому текста данного сообщения.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Вызывает событие, когда сообщение начинает записывать содержимое тела сообщения.

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Вызывает событие, запускаемое записью целого сообщения.

OnBodyToString(XmlDictionaryWriter)

Метод, вызываемый при преобразовании текста сообщения в строку.

OnClose()

Метод, вызываемый при закрытии сообщения.

OnCreateBufferedCopy(Int32)

Метод, вызываемый при создании буфера сообщения для сохранения этого сообщения.

OnEndWriteBodyContents(IAsyncResult)

Вызывает событие, когда завершается запись содержимого тела сообщения.

OnEndWriteMessage(IAsyncResult)

Вызывает событие при завершении записи сообщения в целом.

OnGetBody<T>(XmlDictionaryReader)

Вызывается при получении тела сообщения.

OnGetBodyAttribute(String, String)

Метод, вызываемый при извлечении атрибутов текста сообщения.

OnGetReaderAtBodyContents()

Вызывается при получении средства чтения словаря XML, которое имеет доступ к содержимому текста данного сообщения.

OnWriteBodyContents(XmlDictionaryWriter)

Метод, вызываемый при записи текста сообщения в XML-файл.

OnWriteMessage(XmlDictionaryWriter)

Метод, вызываемый при записи всего сообщения в XML-файл.

OnWriteStartBody(XmlDictionaryWriter)

Метод, вызываемый при записи начального элемента текста в XML-файл.

OnWriteStartEnvelope(XmlDictionaryWriter)

Метод, вызываемый при записи начального элемента конверта в XML-файл.

OnWriteStartHeaders(XmlDictionaryWriter)

Метод, вызываемый при записи начального элемента заголовка в XML-файл.

ToString()

Возвращает строку, представляющую текущий экземпляр класса Message.

WriteBody(XmlDictionaryWriter)

Записывает элемент тела с использованием указанного объекта XmlDictionaryWriter.

WriteBody(XmlWriter)

Сериализует тело сообщения с использованием указанного объекта XmlWriter.

WriteBodyContents(XmlDictionaryWriter)

Сериализует содержимое тела с использованием указанного объекта XmlDictionaryWriter.

WriteMessage(XmlDictionaryWriter)

Сериализует все сообщение с использованием указанного объекта XmlDictionaryWriter.

WriteMessage(XmlWriter)

Сериализует все сообщение с использованием указанного объекта XmlWriter.

WriteStartBody(XmlDictionaryWriter)

Сериализует начальный элемент тела сообщения с использованием указанного XmlDictionaryWriter.

WriteStartBody(XmlWriter)

Сериализует начальный элемент тела сообщения с использованием указанного XmlDictionaryWriter.

WriteStartEnvelope(XmlDictionaryWriter)

Сериализует начальный элемент конверта с использованием указанного объекта XmlDictionaryWriter.

Явные реализации интерфейса

IDisposable.Dispose()

Закрывает все ресурсы, используемые данным сообщением. Этот метод не может быть унаследован.

Методы расширения

ToHttpRequestMessage(Message)

Создает экземпляр HttpRequestMessage из экземпляра Message.

ToHttpResponseMessage(Message)

Создает экземпляр HttpResponseMessage из экземпляра Message.

Применяется к