Sdílet prostřednictvím


Message Třída

Definice

Představuje jednotku komunikace mezi koncovými body v distribuovaném prostředí.

public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
    interface IDisposable
Public MustInherit Class Message
Implements IDisposable
Dědičnost
Message
Implementuje

Příklady

Následující příklad kódu ukazuje klienta, který používá objekt pro vytváření kanálů k odeslání zprávy a přečtení odpovědi.

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

Poznámky

Třída Message poskytuje způsob komunikace libovolných informací mezi odesílatelem a příjemcem v síti. Dá se použít k předávání informací, návrhu nebo vyžádání průběhu akce nebo k vyžádání dat.

Struktura objektu Message představuje obálku SOAP. Skládá se ze dvou odlišných částí: textu zprávy a volitelné kolekce hlaviček reprezentovaných Headers třídou. Obsah zprávy je data definovaná aplikací odesílaná odesílatelem příjemci. Hlavičky zpráv umožňují, aby rozšiřitelnost systému a aplikací splňovaly měnící se požadavky, protože můžete definovat kód pro manipulaci s konkrétními hlavičkami a odpovídání na ně. Můžete také definovat vlastní hlavičky. Záhlaví zpráv jsou serializována nebo deserializována spolu s obsahem zprávy.

Zprávy se přijímají a odesílají v konkrétních formátech. Podpora je poskytována pro dva formáty: standardní textový formát XML a binární formát XML. Objekt Message lze použít k reprezentaci obálky SOAP 1.1 i SOAP 1.2. Všimněte si, že při vytváření je opravena instance Message a je vázána na konkrétní verzi PROTOKOLU SOAP. Vlastnost Version představuje verzi protokolu SOAP zprávy.

Objekt Message lze serializovat do externího úložiště pomocí WriteMessage metody. Vlastnosti zprávy lze také serializovat, ale musí být jednotlivě identifikovány a serializovány samostatně. Deserializace zprávy k vytvoření objektu v paměti Message lze provést pomocí CreateMessage. Vlastnosti musí být také deserializovány jednotlivě a ručně přidány do kolekce vlastností pro konkrétní Message instanci.

Velikost objektu Message je pevná na velikost dat, která přenáší. Každé tělo je modelováno jako instance XmlReader, bez předdefinovaného limitu velikosti datového proudu, který XmlReader instance obtéká. Konkrétní poskytovatelé kanálů ale můžou mít omezení velikosti zpráv, které zpracovávají.

A Message může být opatřena poznámkami užitečnými informacemi vygenerovanými entitou, která zprávu prozkoumala a zpracovala. Tato funkce je poskytována vlastnostmi Headers a Properties vlastnostmi. Kolekce Headers představuje sadu hlaviček PROTOKOLU SOAP ve zprávě.

Vlastnost Properties představuje sadu poznámek na úrovni zpracování zprávy. Vzhledem k tomu, že se informace v hlavičkách přenášejí na drátu, musí entita, která kontroluje hlavičku, podporovat podkladové verze protokolů používaných hlavičkou. Vlastnosti ale poskytují více verzí nezávislý způsob přidávání poznámek ke zprávě.

K vytvoření Message instance použijte jednu z CreateMessage metod.

Doporučuje se, aby příjemce zprávy vždy volal Close , až příjemce dokončí přístup k obsahu zprávy. Tato akce uvolní konečné systémové prostředky (například sokety, pojmenované kanály), které jsou svázané s životností zprávy.

Zvláštní poznámka pro spravované uživatele C++, kteří pocházejí z této třídy:

  • Vložte kód čištění do (On)(Begin)Close (a/nebo OnAbort), ne do destruktoru.
  • Vyhněte se destruktorům: způsobí, že kompilátor automaticky vygeneruje IDisposable.
  • Vyhněte se nenákazovým členům: mohou způsobit, že kompilátor automaticky vygeneruje IDisposable.
  • Vyhněte se finalizačním metodám; pokud ale zahrnete jedno, potlačit upozornění sestavení a volání SuppressFinalize(Object) a finalizátor samotný z (On)(Begin)Close (a/nebo OnAbort) emulovat, co by bylo automaticky generované IDisposable chování.

Poznámky pro implementátory

Při dědění z Message, musíte přepsat následující členy: Headersa Version.

Konstruktory

Name Description
Message()

Inicializuje novou instanci Message třídy.

Vlastnosti

Name Description
Headers

Při přepsání v odvozené třídě získá hlavičky zprávy.

IsDisposed

Vrátí hodnotu, která určuje, zda Message je uvolněna.

IsEmpty

Vrátí hodnotu, která určuje, jestli Message je prázdná.

IsFault

Získá hodnotu, která označuje, zda tato zpráva generuje případné chyby SOAP.

Properties

Při přepsání v odvozené třídě získá sadu poznámek na úrovni zpracování zprávy.

State

Získá aktuální stav tohoto Message.

Version

Při přepsání v odvozené třídě získá verzi protokolu SOAP zprávy.

Metody

Name Description
BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Spustí asynchronní zápis obsahu textu zprávy.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Spustí asynchronní zápis celé zprávy.

Close()

Message Zavře a uvolní všechny prostředky.

CreateBufferedCopy(Int32)

Ukládá celý Message do vyrovnávací paměti pro budoucí přístup.

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

Vytvoří zprávu obsahující chybu SOAP, důvod a podrobnosti chyby, verzi a akci.

CreateMessage(MessageVersion, FaultCode, String, String)

Vytvoří zprávu obsahující chybu SOAP, důvod chyby, verzi a akci.

CreateMessage(MessageVersion, MessageFault, String)

Vytvoří zprávu obsahující chybu PROTOKOLU SOAP, verzi a akci.

CreateMessage(MessageVersion, String, BodyWriter)

Vytvoří zprávu s textem, který se skládá z pole bajtů.

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

Vytvoří zprávu pomocí zadané verze, akce, textu zprávy a serializátoru.

CreateMessage(MessageVersion, String, Object)

Vytvoří zprávu se zadanou verzí, akcí a textem.

CreateMessage(MessageVersion, String, XmlDictionaryReader)

Vytvoří zprávu se zadanou verzí, akcí a textem.

CreateMessage(MessageVersion, String, XmlReader)

Vytvoří zprávu pomocí zadané čtečky, akce a verze.

CreateMessage(MessageVersion, String)

Vytvoří zprávu, která obsahuje verzi a akci.

CreateMessage(XmlDictionaryReader, Int32, MessageVersion)

Vytvoří zprávu pomocí zadané čtečky, akce a verze.

CreateMessage(XmlReader, Int32, MessageVersion)

Vytvoří zprávu pomocí zadané čtečky, akce a verze.

EndWriteBodyContents(IAsyncResult)

Ukončí asynchronní zápis obsahu textu zprávy.

EndWriteMessage(IAsyncResult)

Ukončí asynchronní zápis celé zprávy.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetBody<T>()

Načte tělo této Message instance.

GetBody<T>(XmlObjectSerializer)

Načte tělo tohoto Message pomocí zadaného serializátoru.

GetBodyAttribute(String, String)

Načte atributy textu zprávy.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetReaderAtBodyContents()

Získá čtečku slovníku XML, která přistupuje k základnímu obsahu této zprávy.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Vyvolá událost, když zpráva začne psát obsah textu zprávy.

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Vyvolá událost, která začíná psaním celých zpráv.

OnBodyToString(XmlDictionaryWriter)

Volá se při převodu textu zprávy na řetězec.

OnClose()

Volá se při zavření zprávy.

OnCreateBufferedCopy(Int32)

Volá se při vytvoření vyrovnávací paměti zprávy pro uložení této zprávy.

OnEndWriteBodyContents(IAsyncResult)

Vyvolá událost při psaní obsahu textu zprávy.

OnEndWriteMessage(IAsyncResult)

Vyvolá událost při ukončení zápisu celé zprávy.

OnGetBody<T>(XmlDictionaryReader)

Volá se při načtení textu zprávy.

OnGetBodyAttribute(String, String)

Volá se při načtení atributů textu zprávy.

OnGetReaderAtBodyContents()

Volá se, když se načte čtečka slovníku XML, která přistupuje k základnímu obsahu této zprávy.

OnWriteBodyContents(XmlDictionaryWriter)

Volá se při zápisu textu zprávy do souboru XML.

OnWriteMessage(XmlDictionaryWriter)

Volá se při zápisu celé zprávy do souboru XML.

OnWriteStartBody(XmlDictionaryWriter)

Volá se při zápisu počátečního textu do souboru XML.

OnWriteStartEnvelope(XmlDictionaryWriter)

Volá se při zápisu počáteční obálky do souboru XML.

OnWriteStartHeaders(XmlDictionaryWriter)

Volá se při zápisu počáteční hlavičky do souboru XML.

ToString()

Vrátí řetězec, který představuje aktuální Message instanci.

WriteBody(XmlDictionaryWriter)

Zapíše základní prvek pomocí zadaného XmlDictionaryWriter.

WriteBody(XmlWriter)

Serializuje tělo zprávy pomocí zadaného XmlWriter.

WriteBodyContents(XmlDictionaryWriter)

Serializuje základní obsah pomocí zadaného XmlDictionaryWriter.

WriteMessage(XmlDictionaryWriter)

Serializuje celou zprávu pomocí zadaného XmlDictionaryWriter.

WriteMessage(XmlWriter)

Serializuje celou zprávu pomocí zadaného XmlWriter.

WriteStartBody(XmlDictionaryWriter)

Serializuje počáteční text zprávy pomocí zadaného XmlDictionaryWriter.

WriteStartBody(XmlWriter)

Serializuje počáteční text zprávy pomocí zadaného XmlDictionaryWriter.

WriteStartEnvelope(XmlDictionaryWriter)

Serializuje počáteční obálku pomocí zadané XmlDictionaryWriter.

Explicitní implementace rozhraní

Name Description
IDisposable.Dispose()

Zavře všechny prostředky používané touto zprávou. Tuto metodu nelze zdědit.

Metody rozšíření

Name Description
ToHttpRequestMessage(Message)

HttpRequestMessage Vytvoří instanci z Message instance.

ToHttpResponseMessage(Message)

HttpResponseMessage Vytvoří instanci z Message instance.

Platí pro