Message Classe

Definição

Representa a unidade de comunicação entre endpoints num 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 seguinte mostra um cliente que usa a channel factory 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

Observações

A Message classe fornece um meio de comunicar informação arbitrária entre um emissor e um recetor numa rede. Pode ser usado para transmitir informações, sugerir ou exigir um curso de ação, ou solicitar dados.

A estrutura de um Message objeto representa um envelope SOAP. 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 pela aplicação enviados de um remetente para um recetor. Os cabeçalhos das mensagens permitem a extensibilidade do sistema e da aplicação para satisfazer os requisitos em mudança, porque pode definir código para manipular e responder a cabeçalhos específicos. Também pode definir os seus próprios cabeçalhos. Os cabeçalhos das mensagens são serializados ou desserializados juntamente com o conteúdo da mensagem.

As mensagens são recebidas e enviadas em formatos específicos. É fornecido suporte para dois formatos: o formato XML padrão baseado em texto e um formato XML baseado em binário. O Message objeto pode ser usado para representar tanto os envelopes SOAP 1.1 como SOAP 1.2. Note que uma instância de Message é fixa na criação e está vinculada a uma versão específica do SOAP. A Version propriedade representa a versão SOAP da mensagem.

Um Message objeto pode ser serializado para um armazenamento externo usando o WriteMessage método. As propriedades da mensagem também podem ser serializadas, mas têm de ser identificadas individualmente e serializadas separadamente. A desserialização de uma mensagem para criar um objeto em memória Message pode ser feita usando CreateMessage. As propriedades também devem ser desserializadas individualmente e adicionadas manualmente à coleção de propriedades para a instância específica Message .

O tamanho de um Message objeto é fixo ao tamanho dos dados que está a transmitir. Cada corpo é modelado como uma instância de XmlReader, sem limite pré-definido para o tamanho do fluxo que a XmlReader instância está a envolver. No entanto, fornecedores específicos de canais podem ter um limite no tamanho das mensagens que processam.

A Message pode ser anotado com informação útil gerada por uma entidade que examinou e processou a mensagem. Esta 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 ao nível de processamento na mensagem. Como a informação nos cabeçalhos é transmitida pelo cabo, uma entidade que examina um cabeçalho deve suportar a(s) versão(ões) subjacente(s) dos protocolos usados pelo cabeçalho. No entanto, as propriedades fornecem uma forma mais independente da versão de anotar uma mensagem.

Para criar uma Message instância, use um dos CreateMessage métodos.

Recomenda-se que o consumidor de uma mensagem ligue Close sempre quando terminar de aceder ao conteúdo da mensagem. Esta ação liberta recursos finitos do sistema (por exemplo, sockets, pipes nomeados) que estão ligados à vida útil da mensagem.

Nota especial para utilizadores de C++ gerido derivados desta classe:

  • Coloca o teu código de limpeza em (On)(Begin)Close (e/ou OnAbort), não num destrutor.
  • Evite destruidores: eles fazem com que o compilador gere IDisposableautomaticamente .
  • Evite membros que não sejam de referência: podem fazer com que o compilador gere IDisposableautomaticamente .
  • Evite finalizadores; mas se incluir um, suprima o aviso de compilação 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 IDisposable automaticamente.

Notas para Implementadores

Quando herdas de Message, deves sobrepor os seguintes membros: Headers, e Version.

Construtores

Name Description
Message()

Inicializa uma nova instância da Message classe.

Propriedades

Name Description
Headers

Quando sobrescrito numa classe derivada, obtém os cabeçalhos da mensagem.

IsDisposed

Devolve um valor que indica se o Message está disponível.

IsEmpty

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

IsFault

Recebe um valor que indica se esta mensagem gera alguma falha SOAP.

Properties

Quando é sobreposto numa classe derivada, obtém um conjunto de anotações ao nível de processamento para a mensagem.

State

Obtém o estado atual disto Message.

Version

Quando é sobreposto numa classe derivada, obtém a versão SOAP da mensagem.

Métodos

Name Description
BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Inicia a escrita assíncrona do conteúdo do corpo da mensagem.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Inicia a escrita assíncrona de toda a mensagem.

Close()

Fecha o Message e liberta quaisquer recursos.

CreateBufferedCopy(Int32)

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

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

Cria uma mensagem que contém uma falha SOAP, uma razão e o detalhe da falha, uma versão e uma ação.

CreateMessage(MessageVersion, FaultCode, String, String)

Cria uma mensagem que contém uma falha SOAP, a razão 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 num array de bytes.

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

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

CreateMessage(MessageVersion, String, Object)

Cria uma mensagem com a versão, ação e corpo especificados.

CreateMessage(MessageVersion, String, XmlDictionaryReader)

Cria uma mensagem com a versão, ação e corpo especificados.

CreateMessage(MessageVersion, String, XmlReader)

Cria uma mensagem usando o leitor, ação e 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ção e versão especificados.

CreateMessage(XmlReader, Int32, MessageVersion)

Cria uma mensagem usando o leitor, ação e versão especificados.

EndWriteBodyContents(IAsyncResult)

Termina a escrita assíncrona do conteúdo do corpo da mensagem.

EndWriteMessage(IAsyncResult)

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

GetBody<T>(XmlObjectSerializer)

Recupera o corpo disto Message usando o serializador especificado.

GetBodyAttribute(String, String)

Recupera os atributos do corpo da mensagem.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetReaderAtBodyContents()

Obtém o leitor de dicionário XML que acede ao conteúdo do corpo desta mensagem.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

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

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

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Levanta um evento no início da escrita de mensagens inteiras.

OnBodyToString(XmlDictionaryWriter)

Chamado quando o corpo da mensagem é convertido numa cadeia.

OnClose()

Liga quando a mensagem está a fechar.

OnCreateBufferedCopy(Int32)

É chamado quando é criado um buffer de mensagens para armazenar essa mensagem.

OnEndWriteBodyContents(IAsyncResult)

Levanta um evento quando a escrita do conteúdo do corpo da mensagem termina.

OnEndWriteMessage(IAsyncResult)

Levanta um evento quando a escrita de toda a mensagem termina.

OnGetBody<T>(XmlDictionaryReader)

É chamado quando o corpo da mensagem é recuperado.

OnGetBodyAttribute(String, String)

Chamada quando os atributos do corpo da mensagem são recuperados.

OnGetReaderAtBodyContents()

Chamada quando um leitor de dicionário XML que acede ao conteúdo do corpo desta mensagem é recuperado.

OnWriteBodyContents(XmlDictionaryWriter)

Chamada quando o corpo da mensagem é escrito num ficheiro XML.

OnWriteMessage(XmlDictionaryWriter)

Chamada quando toda a mensagem está escrita num ficheiro XML.

OnWriteStartBody(XmlDictionaryWriter)

Chamado quando o corpo inicial é escrito num ficheiro XML.

OnWriteStartEnvelope(XmlDictionaryWriter)

Chamado quando o envelope inicial é escrito num ficheiro XML.

OnWriteStartHeaders(XmlDictionaryWriter)

Chamado quando o cabeçalho inicial é escrito num ficheiro XML.

ToString()

Devolve uma cadeia que representa a instância atual Message .

WriteBody(XmlDictionaryWriter)

Escreve o elemento corpo usando o especificado XmlDictionaryWriter.

WriteBody(XmlWriter)

Serializa o corpo da mensagem usando o especificado XmlWriter.

WriteBodyContents(XmlDictionaryWriter)

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

WriteMessage(XmlDictionaryWriter)

Serializa toda a mensagem usando o especificado XmlDictionaryWriter.

WriteMessage(XmlWriter)

Serializa toda a mensagem usando o especificado XmlWriter.

WriteStartBody(XmlDictionaryWriter)

Serializa o corpo inicial da mensagem usando o especificado XmlDictionaryWriter.

WriteStartBody(XmlWriter)

Serializa o corpo inicial da mensagem usando o especificado XmlDictionaryWriter.

WriteStartEnvelope(XmlDictionaryWriter)

Serializa o envelope inicial usando o especificado XmlDictionaryWriter.

Implementações de Interface Explícita

Name Description
IDisposable.Dispose()

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

Métodos da Extensão

Name Description
ToHttpRequestMessage(Message)

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

ToHttpResponseMessage(Message)

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

Aplica-se a