Partilhar 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. 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 é 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 em 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 de XmlReader, sem limite predefinido no tamanho do fluxo que a XmlReader instância está encapsulando. No entanto, provedores de canal 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 propriedades e Properties pelas Headers propriedades. 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 do processamento na mensagem. Como as informações em cabeçalhos são transmitidas no fio, 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 seu código de limpeza em (Ativado)(Begin)Fechar (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, suprime o aviso de build e a chamada SuppressFinalize(Object) 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, Messagevocê deve substituir os seguintes membros: Headerse Version.

Construtores

Nome Description
Message()

Inicializa uma nova instância da classe Message.

Propriedades

Nome Description
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

Retorna um valor que indica se o Message valor está vazio.

IsFault

Obtém um valor que indica se essa mensagem gera falhas SOAP.

Properties

Quando substituído em uma classe derivada, obtém um conjunto de anotações no nível do 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 SOAP da mensagem.

Métodos

Nome Description
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 e Message libera todos os recursos.

CreateBufferedCopy(Int32)

Armazena um inteiro Message em um buffer de memória para acesso futuro.

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

Cria uma mensagem que contém uma falha 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 SOAP, o motivo da falha, uma versão e uma ação.

CreateMessage(MessageVersion, MessageFault, String)

Cria uma mensagem que contém uma falha SOAP, 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, XmlObjectSerializer)

Cria uma mensagem usando a versão, a ação, o corpo da mensagem e o serializador especificados.

CreateMessage(MessageVersion, String, Object)

Cria uma mensagem com a versão, a ação e o corpo 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(MessageVersion, String)

Cria uma mensagem que contém uma versão e uma ação.

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)

Termina a gravação assíncrona do conteúdo do corpo da mensagem.

EndWriteMessage(IAsyncResult)

Termina 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 Message instância.

GetBody<T>(XmlObjectSerializer)

Recupera o corpo disso 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 dessa mensagem.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Gera um evento quando a mensagem começa a escrever o conteúdo do corpo da mensagem.

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Gera um evento em que a gravação de mensagens inteiras é iniciada.

OnBodyToString(XmlDictionaryWriter)

Chamado quando o corpo da mensagem é convertido em uma cadeia de caracteres.

OnClose()

Chamado quando a mensagem está fechando.

OnCreateBufferedCopy(Int32)

Chamado quando um buffer de mensagem é criado para armazenar essa mensagem.

OnEndWriteBodyContents(IAsyncResult)

Gera um evento ao gravar o conteúdo do corpo da mensagem.

OnEndWriteMessage(IAsyncResult)

Gera um evento quando a gravação de toda a mensagem 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 dessa 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 atual Message .

WriteBody(XmlDictionaryWriter)

Grava o elemento body usando o especificado XmlDictionaryWriter.

WriteBody(XmlWriter)

Serializa o corpo da mensagem usando o .XmlWriter

WriteBodyContents(XmlDictionaryWriter)

Serializa o conteúdo do corpo usando o especificado XmlDictionaryWriter.

WriteMessage(XmlDictionaryWriter)

Serializa toda a mensagem usando a especificada XmlDictionaryWriter.

WriteMessage(XmlWriter)

Serializa toda a mensagem usando a especificada XmlWriter.

WriteStartBody(XmlDictionaryWriter)

Serializa o corpo inicial da mensagem usando o .XmlDictionaryWriter

WriteStartBody(XmlWriter)

Serializa o corpo inicial da mensagem usando o .XmlDictionaryWriter

WriteStartEnvelope(XmlDictionaryWriter)

Serializa o envelope inicial usando o especificado XmlDictionaryWriter.

Implantações explícitas de interface

Nome Description
IDisposable.Dispose()

Fecha todos os recursos usados por essa mensagem. Esse método não pode ser herdado.

Métodos de Extensão

Nome Description
ToHttpRequestMessage(Message)

Cria uma HttpRequestMessage instância de uma Message instância.

ToHttpResponseMessage(Message)

Cria uma HttpResponseMessage instância de uma Message instância.

Aplica-se a