Message Classe

Definizione

Rappresenta l'unità di comunicazione tra endpoint in un ambiente distribuito.

public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
    interface IDisposable
Public MustInherit Class Message
Implements IDisposable
Ereditarietà
Message
Implementazioni

Esempio

Nell'esempio di codice seguente viene illustrato un client che utilizza la channel factory per inviare un messaggio e leggere la risposta.

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

Commenti

La classe Message consente di comunicare informazioni arbitrarie tra un mittente e un destinatario in una rete. Può essere utilizzata per inoltrare informazioni, suggerire o richiedere un intervento o richiedere dati.

La struttura di un oggetto Message rappresenta una SOAP envelope. È costituita da due parti distinte: il corpo del messaggio e una raccolta di intestazioni facoltativa rappresentata dalla classe Headers. Il contenuto del messaggio sono dati definiti dall'applicazione inviati da un mittente a un destinatario. Le intestazioni del messaggio consentono all'estensibilità del sistema e dell'applicazione di soddisfare esigenze sempre nuove poiché è possibile definire codice per modificare e rispondere a intestazioni specifiche. È anche possibile definire intestazioni personalizzate. Le intestazioni del messaggio vengono serializzate o deserializzate insieme al contenuto del messaggio.

I messaggi vengono ricevuti e inviati in formati particolari. Sono supportati due formati: XML basato su testo standard e XML binario. L'oggetto Message può essere utilizzato per rappresentare entrambe le SOAP envelope 1.1 e 1.2. Dopo che è stata creata, un'istanza di Message diventa fissa ed è associata a una versione SOAP specifica. La proprietà Version rappresenta la versione SOAP del messaggio.

Un oggetto Message può essere serializzato in un archivio esterno utilizzando il metodo WriteMessage. Anche le proprietà del messaggio possono essere serializzate, ma devono essere identificate individualmente e serializzate separatamente. La deserializzazione di un messaggio per creare un oggetto Message in memoria può essere effettuata utilizzando CreateMessage. Le proprietà devono inoltre essere deserializzate individualmente e aggiunte manualmente alla raccolta di proprietà dell'istanza Message specifica.

La dimensione di un oggetto Message è fissata alla dimensione dei dati che sta trasmettendo. Ogni corpo viene modellato come un'istanza di XmlReader, senza limiti predefiniti sulla dimensione del flusso del quale l'istanza XmlReader sta effettuando il wrapping. Provider di canale specifici possono tuttavia avere un limite sulla dimensione dei messaggi che elaborano.

Un oggetto Message può essere annotato con informazioni utili generate da un'entità che ha esaminato ed elaborato il messaggio. Questa funzionalità è fornita dalle proprietà Headers e Properties. La raccolta Headers rappresenta il set di intestazioni SOAP nel messaggio.

La proprietà Properties rappresenta il set di annotazioni a livello di elaborazione incluse nel messaggio. Poiché le informazioni incluse nelle intestazioni vengono trasmesse nella rete, un'entità che esamina un'intestazione deve supportare le versioni sottostanti dei protocolli utilizzati dall'intestazione. Le proprietà forniscono tuttavia una modalità di annotazione dei messaggi maggiormente indipendente dalla versione.

Per creare un'istanza Message, utilizzare uno dei metodi CreateMessage.

Dopo avere terminato l'accesso al contenuto di un messaggio, è consigliabile chiamare sempre il metodo Close. Questa azione consente di liberare risorse di sistema limitate (ad esempio, socket e named pipe) vincolate alla durata del messaggio.

Nota speciale in caso di derivazione da questa classe in C++ gestito:

  • Inserire il codice di pulizia in (On)(Begin)Close (e/o OnAbort), non in un distruttore.

  • Evitare i distruttori: comportano la generazione automatica dell'interfaccia IDisposable da parte del compilatore.

  • Evitare membri di non riferimento: possono comportare la generazione automatica dell'interfaccia IDisposable da parte del compilatore.

  • Evitare i finalizzatori. Se, tuttavia, se ne include uno, eliminare l'avviso di compilazione e chiamare SuppressFinalize(Object) e il finalizzatore stesso mediante (On)(Begin)Close (e/o OnAbort) al fine di emulare ciò che sarebbe stato il comportamento di IDisposable generato automaticamente.

Note per gli implementatori

Quando si eredita dalla classe Message, è necessario eseguire l'override dei membri seguenti: Headers e Version.

Costruttori

Message()

Inizializza una nuova istanza della classe Message.

Proprietà

Headers

Quando sottoposto a override in una classe derivata, recupera le intestazioni del messaggio.

IsDisposed

Restituisce un valore che indica se l'oggetto Message è stato eliminato.

IsEmpty

Restituisce un valore che indica se l'oggetto Message è vuoto.

IsFault

Ottiene un valore che indica se il messaggio genera errori SOAP.

Properties

Quando sottoposto a override in una classe derivata, ottiene un set di annotazioni a livello di elaborazione associate al messaggio.

State

Ottiene lo stato corrente di Message.

Version

Se sottoposto a override in una classe derivata, recupera la versione SOAP del messaggio.

Metodi

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Avvia la scrittura asincrona del contenuto del corpo del messaggio.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Avvia la scrittura asincrona dell'intero messaggio.

Close()

Chiude l'oggetto Message e rilascia qualsiasi risorsa.

CreateBufferedCopy(Int32)

Archivia un intero oggetto Message in un buffer di memoria per l'accesso futuro.

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

Crea un messaggio che contiene un errore SOAP, una causa e i dettagli dell'errore, la versione e l'azione.

CreateMessage(MessageVersion, FaultCode, String, String)

Crea un messaggio che contiene un errore SOAP, la causa dell'errore, una versione e un'azione.

CreateMessage(MessageVersion, MessageFault, String)

Crea un messaggio che contiene un errore SOAP, una versione e un'azione.

CreateMessage(MessageVersion, String)

Crea un messaggio che contiene una versione e un'azione.

CreateMessage(MessageVersion, String, BodyWriter)

Crea un messaggio con un corpo costituito da una matrice di byte.

CreateMessage(MessageVersion, String, Object)

Crea un messaggio con la versione, l'azione e il corpo specificati.

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

Crea un messaggio utilizzando la versione, l'azione, il corpo del messaggio e il serializzatore specificati.

CreateMessage(MessageVersion, String, XmlDictionaryReader)

Crea un messaggio con la versione, l'azione e il corpo specificati.

CreateMessage(MessageVersion, String, XmlReader)

Crea un messaggio utilizzando il lettore, l'azione e la versione specificati.

CreateMessage(XmlDictionaryReader, Int32, MessageVersion)

Crea un messaggio utilizzando il lettore, l'azione e la versione specificati.

CreateMessage(XmlReader, Int32, MessageVersion)

Crea un messaggio utilizzando il lettore, l'azione e la versione specificati.

EndWriteBodyContents(IAsyncResult)

Termina la scrittura asincrona del contenuto del corpo del messaggio.

EndWriteMessage(IAsyncResult)

Termina la scrittura asincrona dell'intero messaggio.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetBody<T>()

Recupera il corpo di questa istanza Message.

GetBody<T>(XmlObjectSerializer)

Recupera il corpo di questo oggetto Message utilizzando il serializzatore specificato.

GetBodyAttribute(String, String)

Recupera gli attributi del corpo del messaggio.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetReaderAtBodyContents()

Ottiene il lettore di dizionario XML che accede al contenuto del corpo di questo messaggio.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Genera un evento quando il messaggio inizia la scrittura del contenuto del corpo del messaggio.

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Genera un evento che avvia la scrittura di interi messaggi.

OnBodyToString(XmlDictionaryWriter)

Viene chiamato quando il corpo del messaggio viene convertito in una stringa.

OnClose()

Viene chiamato quando il messaggio viene chiuso.

OnCreateBufferedCopy(Int32)

Viene chiamato quando viene creato un buffer dei messaggi per archiviare questo messaggio.

OnEndWriteBodyContents(IAsyncResult)

Genera un evento quando termina la scrittura del contenuto del corpo del messaggio.

OnEndWriteMessage(IAsyncResult)

Genera un evento quando termina la scrittura dell'intero messaggio.

OnGetBody<T>(XmlDictionaryReader)

Viene chiamato quando viene recuperato il corpo del messaggio.

OnGetBodyAttribute(String, String)

Viene chiamato quando vengono recuperati gli attributi del corpo del messaggio.

OnGetReaderAtBodyContents()

Viene chiamato quando è possibile recuperare un lettore di dizionario XML in grado di accedere al contenuto del corpo di questo messaggio.

OnWriteBodyContents(XmlDictionaryWriter)

Viene chiamato quando il corpo del messaggio viene scritto in un file XML.

OnWriteMessage(XmlDictionaryWriter)

Viene chiamato quando l'intero messaggio viene scritto in un file XML.

OnWriteStartBody(XmlDictionaryWriter)

Viene chiamato quando il corpo iniziale viene scritto in un file XML.

OnWriteStartEnvelope(XmlDictionaryWriter)

Viene chiamato quando l'elemento envelope iniziale viene scritto in un file XML.

OnWriteStartHeaders(XmlDictionaryWriter)

Viene chiamato quando l'intestazione iniziale viene scritta in un file XML.

ToString()

Restituisce una stringa che rappresenta l'istanza di Message corrente.

WriteBody(XmlDictionaryWriter)

Scrive l'elemento corpo utilizzando la classe XmlDictionaryWriter specificata.

WriteBody(XmlWriter)

Serializza il corpo del messaggio utilizzando l'oggetto XmlWriter specificato.

WriteBodyContents(XmlDictionaryWriter)

Serializza il contenuto del corpo utilizzando l'oggetto XmlDictionaryWriter specificato.

WriteMessage(XmlDictionaryWriter)

Serializza l'intero messaggio utilizzando l'oggetto XmlDictionaryWriter specificato.

WriteMessage(XmlWriter)

Serializza l'intero messaggio utilizzando l'oggetto XmlWriter specificato.

WriteStartBody(XmlDictionaryWriter)

Serializza il corpo iniziale del messaggio utilizzando l'oggetto XmlDictionaryWriter specificato.

WriteStartBody(XmlWriter)

Serializza il corpo iniziale del messaggio utilizzando l'oggetto XmlDictionaryWriter specificato.

WriteStartEnvelope(XmlDictionaryWriter)

Serializza l'elemento envelope iniziale utilizzando l'oggetto XmlDictionaryWriter specificato.

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Chiude tutte le risorse utilizzate da questo messaggio. Questo metodo non può essere ereditato.

Metodi di estensione

ToHttpRequestMessage(Message)

Crea un'istanza di HttpRequestMessage da un'istanza di Message.

ToHttpResponseMessage(Message)

Crea un'istanza di HttpResponseMessage da un'istanza di Message.

Si applica a