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. |