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