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


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 и SOAP 1.2. Обратите внимание, что экземпляр Message исправлен при создании и привязан к определенной версии SOAP. Свойство Version представляет версию СООБЩЕНИЯ SOAP.

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

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

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

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

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

Рекомендуется, чтобы потребитель сообщения всегда звонит Close , когда потребитель завершает доступ к содержимому сообщения. Это действие освобождает конечные системные ресурсы (например, сокеты, именованные каналы), привязанные к времени существования сообщения.

Специальное примечание для пользователей Managed C++, производных от этого класса:

  • Поместите код очистки в (On)(Begin)Close (and/or OnAbort), а не в деструктор.
  • Избегайте деструкторов: они вызывают автоматическое создание IDisposableкомпилятором.
  • Избегайте элементов без ссылок: они могут привести к автоматическому созданию IDisposableкомпилятора.
  • Избегайте завершения; но если включить его, отключите предупреждение сборки и вызов SuppressFinalize(Object) и сам метод завершения из (On)(Begin)Close (and/or 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, BodyWriter)

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

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

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

CreateMessage(MessageVersion, String, Object)

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

CreateMessage(MessageVersion, String, XmlDictionaryReader)

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

CreateMessage(MessageVersion, String, XmlReader)

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

CreateMessage(MessageVersion, String)

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

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)

Записывает элемент body с помощью указанного 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.

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