Message Clase

Definición

Representa la unidad de comunicación entre los extremos de un entorno distribuido.

public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
    interface IDisposable
Public MustInherit Class Message
Implements IDisposable
Herencia
Message
Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra un cliente que usa el generador de canales para enviar un mensaje y leer la respuesta.

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

Comentarios

La clase Message proporciona un medio para comunicar la información arbitraria entre un remitente y un destinatario en una red. Se puede utilizar para retransmitir información, sugerir o exigir un curso de acción o solicitar datos.

La estructura de un objeto Message representa una envoltura SOAP. Se compone de dos partes distintas: el cuerpo del mensaje y una colección opcional de encabezados, representados por la clase Headers. El contenido del mensaje son datos definidos por la aplicación enviados de un remitente a un destinatario. Los encabezados del mensaje permiten al sistema y a la extensibilidad de la aplicación cumplir los requisitos cambiantes, porque puede definir el código para manipular y responder a encabezados específicos. También puede definir sus propios encabezados. Los encabezados del mensaje se serializan o deserializan junto con el contenido del mensaje.

Los mensajes se reciben y envían en formatos determinados. Se proporciona compatibilidad para dos formatos: el formato XML basado en texto estándar y un formato XML basado en binario. El objeto Message se puede utilizar para representar SOAP 1.1 y envolturas de SOAP 1.2. Observe que una instancia de Message se fija al ser creada y se enlaza con una versión SOAP específica. La propiedad Version representa la versión SOAP del mensaje.

Un objeto Message se puede serializar a un almacén externo utilizando el método WriteMessage. También se pueden serializar propiedades del mensaje, pero tienen que ser identificadas individualmente y serializadas por separado. Deserializar un mensaje para crear un objeto Message en memoria se puede hacer utilizando CreateMessage. Las propiedades también se deben deserializar individualmente y agregar manualmente a la colección de propiedades para la instancia Message específica.

El tamaño de un objeto Message se fija según el tamaño de los datos que está transmitiendo. Cada cuerpo se modela como una instancia de XmlReader, sin el límite predefinido en el tamaño de la secuencia que la instancia XmlReader está ajustando. Sin embargo, los proveedores específicos de canal pueden tener un límite en el tamaño de los mensajes que procesan.

Message se puede anotar con información útil generada por una entidad que ha examinado y procesado el mensaje. Headers y las propiedades Properties proporcionan esta funcionalidad. La colección Headers representa el conjunto de encabezados SOAP en el mensaje.

La propiedad Properties representa el conjunto de anotaciones del nivel de procesamiento en el mensaje. Puesto que la información en los encabezados se transmite en la conexión, una entidad que examina un encabezado debe admitir las versiones subyacentes de los protocolos utilizados por el encabezado. Sin embargo, las propiedades proporcionan una manera más independiente de la versión de anotar un mensaje.

Para crear una instancia Message, utilice uno de los métodos CreateMessage.

Se recomienda que un consumidor de un mensaje siempre llame a Close cuando termine de tener acceso al contenido del mensaje. Esta acción libera recursos finitos del sistema (por ejemplo, sockets, canalizaciones con nombre) que condicionan la duración del mensaje.

Nota especial para los usuarios de C++ que deriven de esta clase:

  • Coloque su código de limpieza en (On)(Begin)Close (y/o OnAbort), no en un destructor.

  • Evite los destructores: hacen que el compilador genere automáticamente IDisposable

  • Evite los miembros sin referencia: pueden hacer que el compilador genere automáticamente IDisposable.

  • Evite los finalizadores; pero si incluye uno, suprima la advertencia de compilación y llame a SuppressFinalize(Object) y al propio finalizador de (On)(Begin)Close (y/o OnAbort) para emular lo que habría sido el comportamiento de IDisposable generado automáticamente.

Notas a los implementadores

Al heredar de Message, es necesario reemplazar los miembros siguientes: Headers y Version.

Constructores

Message()

Inicializa una nueva instancia de la clase Message.

Propiedades

Headers

Cuando se invalida en una clase derivada, obtiene los encabezados del mensaje.

IsDisposed

Devuelve un valor que indica si Message se ha eliminado.

IsEmpty

Devuelve un valor que indica si Message está vacío.

IsFault

Obtiene un valor que indica si este mensaje genera un error de SOAP.

Properties

Cuando se invalida en una clase derivada, obtiene un conjunto de anotaciones del nivel de procesamiento en el mensaje.

State

Obtiene el estado actual de Message.

Version

Cuando se invalida en una clase derivada, obtiene la versión SOAP del mensaje.

Métodos

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Inicia la escritura asincrónica del contenido del cuerpo del mensaje.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Inicia la escritura asincrónica del mensaje completo.

Close()

Cierra Message y libera los recursos.

CreateBufferedCopy(Int32)

Almacena un Message completo en un búfer de la memoria para accesos futuros.

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

Crea un mensaje que contiene un error de SOAP, un motivo y el detalle del error, una versión y una acción.

CreateMessage(MessageVersion, FaultCode, String, String)

Crea un mensaje que contiene un error de SOAP, el motivo del error, una versión y una acción.

CreateMessage(MessageVersion, MessageFault, String)

Crea un mensaje que contiene un error SOAP, una versión y una acción.

CreateMessage(MessageVersion, String)

Crea un mensaje que contiene una versión y una acción.

CreateMessage(MessageVersion, String, BodyWriter)

Crea un mensaje con un cuerpo que está compuesto de una matriz de bytes.

CreateMessage(MessageVersion, String, Object)

Crea un mensaje con la versión especificada, acción y cuerpo.

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

Crea un mensaje mediante la versión especificada, acción, cuerpo del mensaje y serializador.

CreateMessage(MessageVersion, String, XmlDictionaryReader)

Crea un mensaje con la versión especificada, acción y cuerpo.

CreateMessage(MessageVersion, String, XmlReader)

Crea un mensaje mediante el lector especificado, acción y versión.

CreateMessage(XmlDictionaryReader, Int32, MessageVersion)

Crea un mensaje mediante el lector especificado, acción y versión.

CreateMessage(XmlReader, Int32, MessageVersion)

Crea un mensaje mediante el lector especificado, acción y versión.

EndWriteBodyContents(IAsyncResult)

Finaliza la escritura asincrónica del contenido del cuerpo del mensaje.

EndWriteMessage(IAsyncResult)

Finaliza la escritura asincrónica del mensaje completo.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetBody<T>()

Recupera el cuerpo de esta instancia de Message.

GetBody<T>(XmlObjectSerializer)

Recupera el cuerpo de Message utilizando el serializador especificado.

GetBodyAttribute(String, String)

Recupera los atributos del cuerpo del mensaje.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetReaderAtBodyContents()

Obtiene el lector del diccionario de XML que tiene acceso al contenido del cuerpo de este mensaje.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

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

Genera un evento cuando el mensaje empieza a escribir el contenido del cuerpo del mensaje.

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Genera un evento que inicia la escritura de mensajes completos.

OnBodyToString(XmlDictionaryWriter)

Se llama cuando el cuerpo del mensaje se convierte en una cadena.

OnClose()

Se llama cuando el mensaje se está cerrando.

OnCreateBufferedCopy(Int32)

Se llama cuando un búfer del mensaje se crea para almacenar este mensaje.

OnEndWriteBodyContents(IAsyncResult)

Genera un evento cuando finaliza la escritura del contenido del cuerpo del mensaje.

OnEndWriteMessage(IAsyncResult)

Genera un evento cuando finaliza la escritura del mensaje completo.

OnGetBody<T>(XmlDictionaryReader)

Se llama cuando se recupera el cuerpo del mensaje.

OnGetBodyAttribute(String, String)

Se llama cuando se recuperan los atributos del cuerpo del mensaje.

OnGetReaderAtBodyContents()

Se llama cuando se recupera un lector del diccionario de XML que puede tener acceso al contenido del cuerpo de este mensaje.

OnWriteBodyContents(XmlDictionaryWriter)

Llamado cuando el cuerpo del mensaje se escribe en un archivo XML.

OnWriteMessage(XmlDictionaryWriter)

Llamado cuando el mensaje entero se escribe en un archivo XML.

OnWriteStartBody(XmlDictionaryWriter)

Llamado cuando el cuerpo del inicio se escribe en un archivo XML.

OnWriteStartEnvelope(XmlDictionaryWriter)

Llamado cuando la envoltura del inicio se escribe en un archivo XML.

OnWriteStartHeaders(XmlDictionaryWriter)

Llamado cuando el encabezado del inicio se escribe en un archivo XML.

ToString()

Devuelve una cadena que representa la instancia de Message actual.

WriteBody(XmlDictionaryWriter)

Escribe el elemento Body mediante el XmlDictionaryWriterespecificado.

WriteBody(XmlWriter)

Serializa el cuerpo del mensaje mediante el XmlWriterespecificado.

WriteBodyContents(XmlDictionaryWriter)

Serializa el contenido del cuerpo mediante el XmlDictionaryWriterespecificado.

WriteMessage(XmlDictionaryWriter)

Serializa el mensaje completo mediante el XmlDictionaryWriterespecificado.

WriteMessage(XmlWriter)

Serializa el mensaje completo mediante el XmlWriterespecificado.

WriteStartBody(XmlDictionaryWriter)

Serializa el cuerpo del inicio del mensaje mediante la clase XmlDictionaryWriter especificada.

WriteStartBody(XmlWriter)

Serializa el cuerpo del inicio del mensaje mediante la clase XmlDictionaryWriter especificada.

WriteStartEnvelope(XmlDictionaryWriter)

Serializa la envoltura del inicio mediante el XmlDictionaryWriterespecificado.

Implementaciones de interfaz explícitas

IDisposable.Dispose()

Cierra todos los recursos utilizados por este mensaje. Este método no se puede heredar.

Métodos de extensión

ToHttpRequestMessage(Message)

Crea una instancia de HttpRequestMessage a partir de una instancia de Message.

ToHttpResponseMessage(Message)

Crea una instancia de HttpResponseMessage a partir de una instancia de Message.

Se aplica a