Message Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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. |