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á kanál factory 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žadování postupu nebo vyžádání dat.
Struktura objektu Message představuje obálku SOAP. Skládá se ze dvou různých částí: textu zprávy a volitelné kolekce hlaviček reprezentovaných Headers třídou . Obsah zprávy jsou data definovaná aplikací odesílaná od odesílatele 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 pro reakci na ně. Můžete také definovat vlastní hlavičky. Hlavičky zprávy jsou serializovány nebo deserializovány spolu s obsahem zprávy.
Zprávy se přijímají a odesílají v určitý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 instance Message je pevně nastavena při vytvoření a je vázána na konkrétní verzi SOAP. Vlastnost Version představuje verzi 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ě. Deserializaci zprávy za účelem 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ě daná velikostí přenášených dat. Každé tělo je modelováno jako instance XmlReader, bez předdefinovaného omezení velikosti datového proudu, který XmlReader instance zalamuje. Konkrétní poskytovatelé kanálů ale můžou mít omezení velikosti zpráv, které zpracovávají.
Objekt Message lze anotovat užitečnými informacemi vygenerovanými entitou, která zprávu prozkoumala a zpracovala. Tuto funkci poskytují Headers vlastnosti a Properties . Kolekce Headers představuje sadu hlaviček SOAP ve zprávě.
Vlastnost Properties představuje sadu poznámek na úrovni zpracování zprávy. Vzhledem k tomu, že informace v hlavičce se přenášejí v přenosu, musí entita, která kontroluje hlavičku, podporovat podkladové verze protokolů používaných hlavičkou. Vlastnosti však poskytují více nezávislý způsob, jak anotovat zprávu.
K vytvoření Message instance použijte jednu z CreateMessage metod .
Doporučuje se, aby příjemce zprávy vždy volal Close , když uživatel dokončí přístup k obsahu zprávy. Tato akce uvolní konečné systémové prostředky (například sokety nebo pojmenované kanály), které jsou vázané na dobu života zprávy.
Zvláštní poznámka pro uživatele spravovaného jazyka C++, kteří jsou odvozeni z této třídy:
Vložte kód pro vyčištění do (On)(Begin)Close (nebo OnAbort), ne do destruktoru.
Vyhněte se destruktorům: způsobí, že kompilátor automaticky vygeneruje IDisposable.
Vyhněte se neodkazovaným členům: mohou způsobit automatické vygenerování IDisposablekompilátoru .
Vyhněte se finalizačním metodám; Ale pokud jeden zahrnete, potlačit upozornění sestavení a volání SuppressFinalize(Object) a finalizační metodu z (On)(Begin)Close (nebo OnAbort), aby se emuloval, co by bylo automaticky generované IDisposable chování.
Poznámky pro implementátory
Pokud dědíte z Message, musíte přepsat následující členy: Headersa Version.
Konstruktory
Message() |
Inicializuje novou instanci Message třídy . |
Vlastnosti
Headers |
Při přepsání v odvozené třídě získá hlavičky zprávy. |
IsDisposed |
Vrátí hodnotu, která označuje, zda Message je odstraněna. |
IsEmpty |
Vrátí hodnotu, která označuje, jestli Message je prázdný. |
IsFault |
Získá hodnotu, která označuje, zda tato zpráva generuje chyby SOAP. |
Properties |
Při přepsání v odvozené třídě získá sadu anotací na úrovni zpracování zprávy. |
State |
Získá aktuální stav tohoto Messageobjektu . |
Version |
Při přepsání v odvozené třídě získá soap verze zprávy. |
Metody
BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Spustí asynchronní zápis obsahu textu zprávy. |
BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Spustí asynchronní psaní celé zprávy. |
Close() |
Message Zavře a uvolní všechny prostředky. |
CreateBufferedCopy(Int32) |
Ukládá celek Message do vyrovnávací paměti pro budoucí přístup. |
CreateMessage(MessageVersion, FaultCode, String, Object, String) |
Vytvoří zprávu, která obsahuje chybu SOAP, důvod a podrobnosti chyby, verzi a akci. |
CreateMessage(MessageVersion, FaultCode, String, String) |
Vytvoří zprávu, která obsahuje chybu SOAP, důvod chyby, verzi a akci. |
CreateMessage(MessageVersion, MessageFault, String) |
Vytvoří zprávu, která obsahuje chybu SOAP, verzi a akci. |
CreateMessage(MessageVersion, String) |
Vytvoří zprávu, která obsahuje verzi a akci. |
CreateMessage(MessageVersion, String, BodyWriter) |
Vytvoří zprávu s textem, který se skládá z pole bajtů. |
CreateMessage(MessageVersion, String, Object) |
Vytvoří zprávu se zadanou verzí, akcí a textem. |
CreateMessage(MessageVersion, String, Object, XmlObjectSerializer) |
Vytvoří zprávu pomocí zadané verze, akce, textu zprávy a serializátoru. |
CreateMessage(MessageVersion, String, XmlDictionaryReader) |
Vytvoří zprávu se zadanou verzí, akcí a textem. |
CreateMessage(MessageVersion, String, XmlReader) |
Vytvoří zprávu pomocí zadaného čtenáře, akce a verze. |
CreateMessage(XmlDictionaryReader, Int32, MessageVersion) |
Vytvoří zprávu pomocí zadaného čtenáře, akce a verze. |
CreateMessage(XmlReader, Int32, MessageVersion) |
Vytvoří zprávu pomocí zadaného čtenáře, akce a verze. |
EndWriteBodyContents(IAsyncResult) |
Ukončí asynchronní zápis obsahu textu zprávy. |
EndWriteMessage(IAsyncResult) |
Ukončí asynchronní psaní celé zprávy. |
Equals(Object) |
Určí, zda se zadaný objekt rovná 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í hashovací funkce. (Zděděno od Object) |
GetReaderAtBodyContents() |
Získá čtečku slovníku XML, která přistupuje k obsahu textu této zprávy. |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (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, kdy se spustí psaní celých zpráv. |
OnBodyToString(XmlDictionaryWriter) |
Volá se při převodu textu zprávy na řetězec. |
OnClose() |
Volá se při zavírání zprávy. |
OnCreateBufferedCopy(Int32) |
Volá se při vytvoření vyrovnávací paměti pro uložení této zprávy. |
OnEndWriteBodyContents(IAsyncResult) |
Vyvolá událost při psaní obsahu textu zprávy. |
OnEndWriteMessage(IAsyncResult) |
Vyvolá událost, když skončí psaní celé zprávy. |
OnGetBody<T>(XmlDictionaryReader) |
Volá se při načtení textu zprávy. |
OnGetBodyAttribute(String, String) |
Volána při načtení atributů textu zprávy. |
OnGetReaderAtBodyContents() |
Volána při načtení čtečky slovníku XML, která přistupuje k obsahu této zprávy. |
OnWriteBodyContents(XmlDictionaryWriter) |
Volána při zápisu textu zprávy do souboru XML. |
OnWriteMessage(XmlDictionaryWriter) |
Volá se, když je celá zpráva zapsána 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 element body pomocí zadaného XmlDictionaryWriterobjektu . |
WriteBody(XmlWriter) |
Serializuje text zprávy pomocí zadaného XmlWriter. |
WriteBodyContents(XmlDictionaryWriter) |
Serializuje obsah těla 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ého XmlDictionaryWriter. |
Explicitní implementace rozhraní
IDisposable.Dispose() |
Zavře všechny prostředky používané touto zprávou. Tuto metodu nelze dědit. |
Metody rozšíření
ToHttpRequestMessage(Message) |
Vytvoří HttpRequestMessage instanci z Message instance. |
ToHttpResponseMessage(Message) |
Vytvoří HttpResponseMessage instanci z Message instance. |