Message Класс

Определение

Представляет логическую единицу взаимодействия между конечными точками в распределенной среде.Represents the unit of communication between endpoints in a distributed environment.

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

Примеры

В следующем примере кода показан клиент, использующий фабрику каналов для отправки сообщения и чтения ответа.The following code example shows a client that uses the channel factory to send a message and read the reply.

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 предоставляет средства передачи произвольной информации от отправителя получателю по сети.The Message class provides a means of communicating arbitrary information between a sender and a receiver on a network. Он может использоваться для трансляции информации, предложения или запроса действий или запроса данных.It can be used to relay information, suggest or demand a course of action, or request data.

Структура объекта Message представляет конверт SOAP.The structure of a Message object represents a SOAP envelope. Она состоит из двух отдельных частей: текста сообщения и дополнительной коллекции заголовков, представленной классом Headers.It consists of two distinct parts: the message's body and an optional collection of headers, represented by the Headers class. Содержимое сообщения — это определяемые приложением данные, которые передаются от отправителя получателю.The message content is application-defined data sent from a sender to a receiver. Заголовки сообщения обеспечивают расширяемость системы и приложения для обеспечения соответствия изменяющимся требованиям, поскольку пользователь может определять код, обрабатывающий указанные заголовки.The message headers enable system and application extensibility to meet the changing requirements, because you can define code to manipulate and respond to specific headers. Также можно определять собственные заголовки.You can also define your own headers. Заголовки сообщения сериализуются и десериализуются вместе с содержимым сообщения.Message headers are serialized or deserialized along with the contents of the message.

Сообщения принимаются и отправляются в определенных форматах.Messages are received and sent in particular formats. Предусмотрена поддержка двух форматов: стандартный текстовый XML-формат и формат двоичных данных XML.Support is provided for two formats: the standard text-based XML format and a binary-based XML format. Объект Message может использоваться для представления конвертов SOAP версий 1.1 и 1.2.The Message object can be used to represent both SOAP 1.1 and SOAP 1.2 envelopes. Обратите внимание, что экземпляр класса Message при создании фиксируется и привязывается к определенной версии SOAP.Note that an instance of Message is fixed upon creation and is bound to a specific SOAP version. Версия SOAP, используемая для обработки сообщения, представлена свойством Version.The Version property represents the SOAP version of the message.

Объект Message может быть сериализован во внешнее хранилище с помощью метода WriteMessage.A Message object can be serialized to an external store by using the WriteMessage method. Свойства сообщения также могут сериализовываться, но они должны идентифицироваться и сериализовываться по отдельности.Properties of the message can also be serialized, but they have to be individually identified and serialized separately. Десериализация сообщения для создания объекта Message в памяти выполняется с помощью метода CreateMessage.Deserializing a message to create an in-memory Message object can be done using CreateMessage. Свойства десериализуются по отдельности и добавляются в коллекцию свойств указанного экземпляра класса Message вручную.Properties must also be deserialized individually and manually added to the property collection for the specific Message instance.

Размер объекта Message устанавливается равным объему передаваемых данных.The size of a Message object is fixed to the size of data it is transmitting. Текст каждого сообщения моделируется как экземпляр класса XmlReader без заранее установленного ограничения размера потока, оболочку для которого создает объект XmlReader.Every body is modeled as an instance of XmlReader, with no predefined limit on the size of the stream that the XmlReader instance is wrapping. В то же время поставщики определенных каналов могут устанавливать ограничения размера обрабатываемых сообщений.However, specific channel providers can have a limit on the size of messages that they process.

В объект Message могут быть добавлены полезные сведения, созданные сущностью, которая проанализировала и обработала сообщение.A Message can be annotated with useful information generated by an entity that has examined and processed the message. Эта функциональность обеспечивается свойствами Headers и Properties.This functionality is provided by the Headers and Properties properties. Коллекция Headers представляет набор SOAP-заголовков сообщения.The Headers collection represents the set of SOAP headers on the message.

Свойство Properties представляет набор заметок уровня обработки сообщения.The Properties property represents the set of processing-level annotations on the message. Поскольку информация, содержащаяся в заголовках, передается по сети, сущность, которая анализирует заголовок, должна поддерживать основные версии протоколов, используемых для обработки заголовков.Because information in headers is transmitted on the wire, an entity that examines a header must support the underlying version(s) of the protocols used by the header. Свойства представляют собой менее зависимый от версий способ создания заметок для сообщения.However, properties provide a more version-independent way of annotating a message.

Для создания экземпляра класса Message используйте один из методов CreateMessage.To create a Message instance, use one of the CreateMessage methods.

Рекомендуется, чтобы объект-получатель сообщения всегда вызывал метод Close по окончании обработки содержимого сообщения.It is recommended that a consumer of a message always call Close when the consumer is finished accessing the contents of the message. При этом освобождаются ограниченные ресурсы системы (например, сокеты, именованные каналы), которые связаны с временем существования сообщения.This action frees finite system resources (for example, sockets, named pipes) that are tied to the lifetime of the message.

Особое примечание для пользователей управляемого кода C++, создающих классы, унаследованные от данного.Special note for Managed C++ users deriving from this class:

  • Поместите код очистки в блок (On)(Begin)Close (или OnAbort), а не в деструктор.Put your cleanup code in (On)(Begin)Close (and/or OnAbort), not in a destructor.

  • Избегайте использования деструкторов, поскольку они приводят к тому, что компилятор автоматически создает IDisposable.Avoid destructors: they cause the compiler to auto-generate IDisposable.

  • Избегайте использования нессылочных членов, поскольку они приводят к тому, что компилятор автоматически создает IDisposable.Avoid non-reference members: they can cause the compiler to auto-generate IDisposable.

  • Избегайте использования методов завершения. При включении этого метода необходимо подавить предупреждение построения и вызвать метод SuppressFinalize(Object) и сам метод завершения из блока (On)(Begin)Close (или OnAbort) для эмуляции автоматического поведения IDisposable.Avoid finalizers; but if you include one, suppress the build warning and call SuppressFinalize(Object) and the finalizer itself from (On)(Begin)Close (and/or OnAbort) to emulate what would have been the auto-generated IDisposable behavior.

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

При наследовании от класса Message необходимо переопределить следующие члены: Headers и Version.When you inherit from Message, you must override the following members: Headers, and Version.

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

Message()

Инициализирует новый экземпляр класса Message.Initializes a new instance of the Message class.

Свойства

Headers

При переопределении в производном классе возвращает заголовки сообщения.When overridden in a derived class, gets the headers of the message.

IsDisposed

Возвращает значение, указывающее, удален ли объект Message.Returns a value that indicates whether the Message is disposed.

IsEmpty

Возвращает значение, указывающее, пуст ли объект Message.Returns a value that indicates whether the Message is empty.

IsFault

Получает значение, указывающее, привело ли данное сообщение к созданию ошибок SOAP.Gets a value that indicates whether this message generates any SOAP faults.

Properties

При переопределении в производном классе получает набор заметок к сообщению уровня обработки.When overridden in a derived class, gets a set of processing-level annotations to the message.

State

Возвращает текущее состояние данного объекта Message.Gets the current state of this Message.

Version

При переопределении в производном классе возвращает версию SOAP сообщения.When overridden in a derived class, gets the SOAP version of the message.

Методы

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Начинает асинхронную запись содержимого текста сообщения.Starts the asynchronous writing of the contents of the message body.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Начинает асинхронную запись всего сообщения.Starts the asynchronous writing of the entire message.

Close()

Закрывает объект Message и освобождает все ресурсы.Closes the Message and releases any resources.

CreateBufferedCopy(Int32)

Сохраняет весь объект Message в буфере в памяти для доступа в дальнейшем.Stores an entire Message into a memory buffer for future access.

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

Создает сообщение, в котором содержится ошибка SOAP, причина ошибки, подробные сведения об ошибке, версия и действие.Creates a message that contains a SOAP fault, a reason and the detail for the fault, a version and an action.

CreateMessage(MessageVersion, FaultCode, String, String)

Создает сообщение, в котором содержится ошибка SOAP, причина ошибки, версия и действие.Creates a message that contains a SOAP fault, the reason for the fault, a version and an action.

CreateMessage(MessageVersion, MessageFault, String)

Создает сообщение, в котором содержится ошибка SOAP, версия и действие.Creates a message that contains a SOAP fault, a version and an action.

CreateMessage(MessageVersion, String)

Создает сообщение, в котором содержится версия и действие.Creates a message that contains a version and an action.

CreateMessage(MessageVersion, String, BodyWriter)

Создает сообщение с текстом, содержащим массив байтов.Creates a message with a body that consists of an array of bytes.

CreateMessage(MessageVersion, String, Object)

Создает сообщение с указанными версией, действием и текстом.Creates a message with the specified version, action and body.

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

Создает сообщение с использованием указанных версии, действия, текста сообщения и сериализатора.Creates a message using the specified version, action, message body and serializer.

CreateMessage(MessageVersion, String, XmlDictionaryReader)

Создает сообщение с указанными версией, действием и текстом.Creates a message with the specified version, action and body.

CreateMessage(MessageVersion, String, XmlReader)

Создает сообщение с использованием указанных средства чтения, действия и версии.Creates a message using the specified reader, action and version.

CreateMessage(XmlDictionaryReader, Int32, MessageVersion)

Создает сообщение с использованием указанных средства чтения, действия и версии.Creates a message using the specified reader, action and version.

CreateMessage(XmlReader, Int32, MessageVersion)

Создает сообщение с использованием указанных средства чтения, действия и версии.Creates a message using the specified reader, action and version.

EndWriteBodyContents(IAsyncResult)

Завершает асинхронную запись содержимого текста сообщения.Ends the asynchronous writing of the contents of the message body.

EndWriteMessage(IAsyncResult)

Завершает асинхронную запись всего сообщения.Ends the asynchronous writing of the entire message.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

Извлекает текст данного экземпляра Message.Retrieves the body of this Message instance.

GetBody<T>(XmlObjectSerializer)

Извлекает текст данного экземпляра Message с использованием указанного сериализатора.Retrieves the body of this Message using the specified serializer.

GetBodyAttribute(String, String)

Извлекает атрибуты текста сообщения.Retrieves the attributes of the message body.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

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

Возвращает средство чтения словаря XML, обеспечивающее доступ к содержимому текста данного сообщения.Gets the XML dictionary reader that accesses the body content of this message.

GetType()

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

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Вызывает событие, когда сообщение начинает записывать содержимое тела сообщения.Raises an event when the message starts writing the contents of the message body.

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Вызывает событие, запускаемое записью целого сообщения.Raises an event the writing of entire messages starts.

OnBodyToString(XmlDictionaryWriter)

Метод, вызываемый при преобразовании текста сообщения в строку.Called when the message body is converted to a string.

OnClose()

Метод, вызываемый при закрытии сообщения.Called when the message is closing.

OnCreateBufferedCopy(Int32)

Метод, вызываемый при создании буфера сообщения для сохранения этого сообщения.Called when a message buffer is created to store this message.

OnEndWriteBodyContents(IAsyncResult)

Вызывает событие, когда завершается запись содержимого тела сообщения.Raises an event when writing of the contents of the message body ends.

OnEndWriteMessage(IAsyncResult)

Вызывает событие при завершении записи сообщения в целом.Raises an event when the writing of the entire message ends.

OnGetBody<T>(XmlDictionaryReader)

Вызывается при получении тела сообщения.Called when the body of the message is retrieved.

OnGetBodyAttribute(String, String)

Метод, вызываемый при извлечении атрибутов текста сообщения.Called when the attributes of the message body is retrieved.

OnGetReaderAtBodyContents()

Вызывается при получении средства чтения словаря XML, которое имеет доступ к содержимому текста данного сообщения.Called when an XML dictionary reader that accesses the body content of this message is retrieved.

OnWriteBodyContents(XmlDictionaryWriter)

Метод, вызываемый при записи текста сообщения в XML-файл.Called when the message body is written to an XML file.

OnWriteMessage(XmlDictionaryWriter)

Метод, вызываемый при записи всего сообщения в XML-файл.Called when the entire message is written to an XML file.

OnWriteStartBody(XmlDictionaryWriter)

Метод, вызываемый при записи начального элемента текста в XML-файл.Called when the start body is written to an XML file.

OnWriteStartEnvelope(XmlDictionaryWriter)

Метод, вызываемый при записи начального элемента конверта в XML-файл.Called when the start envelope is written to an XML file.

OnWriteStartHeaders(XmlDictionaryWriter)

Метод, вызываемый при записи начального элемента заголовка в XML-файл.Called when the start header is written to an XML file.

ToString()

Возвращает строку, представляющую текущий экземпляр класса Message.Returns a string that represents the current Message instance.

WriteBody(XmlDictionaryWriter)

Записывает элемент тела с использованием указанного объекта XmlDictionaryWriter.Writes the body element using the specified XmlDictionaryWriter.

WriteBody(XmlWriter)

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

WriteBodyContents(XmlDictionaryWriter)

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

WriteMessage(XmlDictionaryWriter)

Сериализует все сообщение с использованием указанного объекта XmlDictionaryWriter.Serializes the entire message using the specified XmlDictionaryWriter.

WriteMessage(XmlWriter)

Сериализует все сообщение с использованием указанного объекта XmlWriter.Serializes the entire message using the specified XmlWriter.

WriteStartBody(XmlDictionaryWriter)

Сериализует начальный элемент тела сообщения с использованием указанного XmlDictionaryWriter.Serializes the start body of the message using the specified XmlDictionaryWriter.

WriteStartBody(XmlWriter)

Сериализует начальный элемент тела сообщения с использованием указанного XmlDictionaryWriter.Serializes the start body of the message using the specified XmlDictionaryWriter.

WriteStartEnvelope(XmlDictionaryWriter)

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

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

IDisposable.Dispose()

Закрывает все ресурсы, используемые данным сообщением.Closes all the resources used by this message. Наследовать этот метод нельзя.This method cannot be inherited.

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

ToHttpRequestMessage(Message)

Создает экземпляр HttpRequestMessage из экземпляра Message.Creates a HttpRequestMessage instance from an Message instance.

ToHttpResponseMessage(Message)

Создает экземпляр HttpResponseMessage из экземпляра Message.Creates a HttpResponseMessage instance from an Message instance.

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