Compartilhar via


Message Classe

Definição

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.

Aplica-se a