Message Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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. |