Message Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa a unidade de comunicação entre pontos de extremidade em um ambiente distribuído.
public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
interface IDisposable
Public MustInherit Class Message
Implements IDisposable
- Herança
-
Message
- Implementações
Exemplos
O exemplo de código a seguir mostra um cliente que usa a fábrica de canais para enviar uma mensagem e ler a resposta.
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
Comentários
A Message classe fornece um meio de comunicar informações arbitrárias entre um remetente e um receptor em uma rede. Ele pode ser usado para retransmitir informações, sugerir ou exigir um curso de ação ou solicitar dados.
A estrutura de um Message objeto representa um envelope SOAP. Ele consiste em duas partes distintas: o corpo da mensagem e uma coleção opcional de cabeçalhos, representada pela Headers classe . O conteúdo da mensagem são dados definidos pelo aplicativo enviados de um remetente para um receptor. Os cabeçalhos de mensagem permitem que a extensibilidade do sistema e do aplicativo atenda aos requisitos de alteração, pois você pode definir o código para manipular e responder a cabeçalhos específicos. Você também pode definir seus próprios cabeçalhos. Os cabeçalhos de mensagem são serializados ou desserializados junto com o conteúdo da mensagem.
As mensagens são recebidas e enviadas em formatos específicos. O suporte é fornecido para dois formatos: o formato XML baseado em texto padrão e um formato XML baseado em binário. O Message objeto pode ser usado para representar envelopes SOAP 1.1 e SOAP 1.2. Observe que uma instância de Message é corrigida após a criação e está associada a uma versão SOAP específica. A Version propriedade representa a versão SOAP da mensagem.
Um Message objeto pode ser serializado para um repositório externo usando o WriteMessage método . As propriedades da mensagem também podem ser serializadas, mas precisam ser identificadas individualmente e serializadas separadamente. Desserializar uma mensagem para criar um objeto na memória Message pode ser feito usando CreateMessage. As propriedades também devem ser desserializadas individualmente e adicionadas manualmente à coleção de propriedades da instância específica Message .
O tamanho de um Message objeto é fixo para o tamanho dos dados que ele está transmitindo. Cada corpo é modelado como uma instância do XmlReader, sem limite predefinido no tamanho do fluxo que a XmlReader instância está encapsulando. No entanto, provedores de canais específicos podem ter um limite no tamanho das mensagens que processam.
Um Message pode ser anotado com informações úteis geradas por uma entidade que examinou e processou a mensagem. Essa funcionalidade é fornecida pelas Headers propriedades e Properties . A Headers coleção representa o conjunto de cabeçalhos SOAP na mensagem.
A Properties propriedade representa o conjunto de anotações no nível de processamento na mensagem. Como as informações em cabeçalhos são transmitidas na transmissão, uma entidade que examina um cabeçalho deve dar suporte às versões subjacentes dos protocolos usados pelo cabeçalho. No entanto, as propriedades fornecem uma maneira mais independente de versão de anotar uma mensagem.
Para criar uma Message instância, use um dos CreateMessage métodos.
É recomendável que um consumidor de uma mensagem sempre chame Close quando o consumidor terminar de acessar o conteúdo da mensagem. Essa ação libera recursos finitos do sistema (por exemplo, soquetes, pipes nomeados) que estão vinculados ao tempo de vida da mensagem.
Observação especial para usuários C++ gerenciados derivados dessa classe:
Coloque o código de limpeza em (On)(Begin)Close (e/ou OnAbort), não em um destruidor.
Evite destruidores: eles fazem com que o compilador gere IDisposableautomaticamente .
Evite membros não referenciados: eles podem fazer com que o compilador gere IDisposableautomaticamente .
Evite finalizadores; mas, se você incluir um, suprima o aviso e a chamada SuppressFinalize(Object) de build e o próprio finalizador de (On)(Begin)Close (e/ou OnAbort) para emular o que teria sido o comportamento gerado automaticamente IDisposable .
Notas aos Implementadores
Ao herdar de Message, você deve substituir os seguintes membros: Headerse Version.
Construtores
Message() |
Inicializa uma nova instância da classe Message. |
Propriedades
Headers |
Quando substituído em uma classe derivada, obtém os cabeçalhos da mensagem. |
IsDisposed |
Retorna um valor que indica se o Message é descartado. |
IsEmpty |
Obtém um valor que indica se o Message está vazio. |
IsFault |
Obtém um valor que indica se essa mensagem gera falhas de SOAP. |
Properties |
Quando substituído em uma classe derivada, obtém um conjunto de anotações no nível de processamento para a mensagem. |
State |
Obtém o estado atual deste Message. |
Version |
Quando substituído em uma classe derivada, obtém a versão de SOAP da mensagem. |
Métodos
BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Inicia a gravação assíncrona do conteúdo do corpo da mensagem. |
BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Inicia a gravação assíncrona de toda a mensagem. |
Close() |
Fecha o Message e libera os recursos usados. |
CreateBufferedCopy(Int32) |
Armazena um Message inteiro em um buffer de memória para acesso futuro. |
CreateMessage(MessageVersion, FaultCode, String, Object, String) |
Cria uma mensagem que contém uma falha de SOAP, um motivo e os detalhes da falha, uma versão e uma ação. |
CreateMessage(MessageVersion, FaultCode, String, String) |
Cria uma mensagem que contém uma falha de SOAP, o motivo da falha, uma versão e uma ação. |
CreateMessage(MessageVersion, MessageFault, String) |
Cria uma mensagem que contém uma falha de SOAP, uma versão e uma ação. |
CreateMessage(MessageVersion, String) |
Cria uma mensagem que contém uma versão e uma ação. |
CreateMessage(MessageVersion, String, BodyWriter) |
Cria uma mensagem com um corpo que consiste em uma matriz de bytes. |
CreateMessage(MessageVersion, String, Object) |
Cria uma mensagem com a versão, a ação e o corpo especificados. |
CreateMessage(MessageVersion, String, Object, XmlObjectSerializer) |
Cria uma mensagem usando a versão, a ação, o corpo da mensagem e o serializador especificados. |
CreateMessage(MessageVersion, String, XmlDictionaryReader) |
Cria uma mensagem com a versão, a ação e o corpo especificados. |
CreateMessage(MessageVersion, String, XmlReader) |
Cria uma mensagem usando o leitor, a ação e a versão especificados. |
CreateMessage(XmlDictionaryReader, Int32, MessageVersion) |
Cria uma mensagem usando o leitor, a ação e a versão especificados. |
CreateMessage(XmlReader, Int32, MessageVersion) |
Cria uma mensagem usando o leitor, a ação e a versão especificados. |
EndWriteBodyContents(IAsyncResult) |
Encerra a gravação assíncrona do conteúdo do corpo da mensagem. |
EndWriteMessage(IAsyncResult) |
Encerra a gravação assíncrona de toda a mensagem. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetBody<T>() |
Recupera o corpo dessa instância Message. |
GetBody<T>(XmlObjectSerializer) |
Recupera o corpo deste Message usando o serializador especificado. |
GetBodyAttribute(String, String) |
Recupera os atributos do corpo da mensagem. |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetReaderAtBodyContents() |
Obtém o leitor de dicionário XML que acessa o conteúdo do corpo da mensagem. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Aciona um evento quando a mensagem começa a gravar o conteúdo do corpo da mensagem. |
OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Aciona um evento quando a gravação de mensagens inteiras inicia. |
OnBodyToString(XmlDictionaryWriter) |
Chamado quando o corpo da mensagem é convertido em uma cadeia de caracteres. |
OnClose() |
Chamado quando a mensagem está sendo fechada. |
OnCreateBufferedCopy(Int32) |
Chamado quando um buffer de mensagem é criado para armazenar esta mensagem. |
OnEndWriteBodyContents(IAsyncResult) |
Aciona um evento quando a gravação do conteúdo do corpo da mensagem termina. |
OnEndWriteMessage(IAsyncResult) |
Aciona um evento quando a gravação da mensagem inteira termina. |
OnGetBody<T>(XmlDictionaryReader) |
Chamado quando o corpo da mensagem é recuperado. |
OnGetBodyAttribute(String, String) |
Chamado quando os atributos do corpo da mensagem são recuperados. |
OnGetReaderAtBodyContents() |
Chamado quando um leitor de dicionário XML que acessa o conteúdo do corpo desta mensagem é recuperado. |
OnWriteBodyContents(XmlDictionaryWriter) |
Chamado quando o corpo da mensagem é gravado em um arquivo XML. |
OnWriteMessage(XmlDictionaryWriter) |
Chamado quando a mensagem inteira é gravada em um arquivo XML. |
OnWriteStartBody(XmlDictionaryWriter) |
Chamado quando o corpo inicial é gravado em um arquivo XML. |
OnWriteStartEnvelope(XmlDictionaryWriter) |
Chamado quando o envelope inicial é gravado em um arquivo XML. |
OnWriteStartHeaders(XmlDictionaryWriter) |
Chamado quando o cabeçalho inicial é gravado em um arquivo XML. |
ToString() |
Retorna uma cadeia de caracteres que representa a instância Message atual. |
WriteBody(XmlDictionaryWriter) |
Grava o elemento de corpo usando o XmlDictionaryWriter especificado. |
WriteBody(XmlWriter) |
Serializa o corpo da mensagem usando o XmlWriter especificado. |
WriteBodyContents(XmlDictionaryWriter) |
Serializa o conteúdo do corpo usando o XmlDictionaryWriter especificado. |
WriteMessage(XmlDictionaryWriter) |
Serializa a mensagem inteira usando o XmlDictionaryWriter especificado. |
WriteMessage(XmlWriter) |
Serializa a mensagem inteira usando o XmlWriter especificado. |
WriteStartBody(XmlDictionaryWriter) |
Serializa o corpo inicial da mensagem usando o XmlDictionaryWriter especificado. |
WriteStartBody(XmlWriter) |
Serializa o corpo inicial da mensagem usando o XmlDictionaryWriter especificado. |
WriteStartEnvelope(XmlDictionaryWriter) |
Serializa o envelope inicial usando o XmlDictionaryWriter especificado. |
Implantações explícitas de interface
IDisposable.Dispose() |
Fecha todos os recursos usados por esta mensagem. Esse método não pode ser herdado. |
Métodos de Extensão
ToHttpRequestMessage(Message) |
Cria uma instância de HttpRequestMessage de uma instância de Message. |
ToHttpResponseMessage(Message) |
Cria uma instância de HttpResponseMessage de uma instância de Message. |