Message Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die Kommunikationseinheit zwischen Endpunkten in einer verteilten Umgebung dar.
public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
interface IDisposable
Public MustInherit Class Message
Implements IDisposable
- Vererbung
-
Message
- Implementiert
Beispiele
Das folgende Codebeispiel zeigt einen Client, der die Kanalfactory zum Senden einer Nachricht und zum Lesen der Antwort verwendet.
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
Hinweise
Die Message-Klasse bietet eine Möglichkeit, beliebige Informationen zwischen einem Absender und Empfänger in einem Netzwerk zu kommunizieren. Sie kann zum Weiterleiten von Informationen, zum Vorschlagen oder Fordern einer Vorgehensweise oder zum Anfordern von Daten verwendet werden.
Die Struktur eines Message-Objekts stellt einen SOAP-Umschlag dar. Er besteht aus zwei verschiedenen Teilen: dem Nachrichtentext und einer optionalen Auflistung von Headern, die von der Headers-Klasse dargestellt werden. Der Nachrichteninhalt stellt von einer Anwendung definierte Daten dar, die von einem Absender an einen Empfänger gesendet werden. Die Nachrichtenheader ermöglichen die Erweiterung von System und Anwendungen, um sich ändernden Anforderungen gerecht zu werden, da Sie Code definieren können, mit dem nur bestimmte Header bearbeitet oder nur auf bestimmte Header reagiert wird. Sie können außerdem eigene Header definieren. Nachrichtenheader werden zusammen mit dem Inhalt der Nachricht serialisiert oder deserialisiert.
Nachrichten werden in bestimmten Formaten empfangen und gesendet. Es werden zwei Formate unterstützt: Das standardmäßige, textbasierte XML-Format und ein binäres XML-Format. Das Message-Objekt kann sowohl zum Darstellen von SOAP 1.1- als auch SOAP 1.2-Umschlägen verwendet werden. Beachten Sie, dass eine Instanz von Message bei der Erstellung festgelegt wird und an eine bestimmte SOAP-Version gebunden ist. Die Version-Eigenschaft stellt die SOAP-Version der Nachricht dar.
Ein Message-Objekt kann in einen externen Speicher serialisiert werden, indem die WriteMessage-Methode verwendet wird. Es können auch Eigenschaften der Nachricht serialisiert werden, wobei diese jedoch einzeln identifiziert und serialisiert werden müssen. Um eine Nachricht zu deserialisieren und ein Message-Objekt im Arbeitsspeicher zu erstellen, kann CreateMessage verwendet werden. Eigenschaften für die spezifische Message-Instanz müssen ebenfalls einzeln deserialisiert und manuell zur Eigenschaftenauflistung hinzugefügt werden .
Die Größe eines Message-Objekts ist an die Größe der Daten, die es überträgt, gebunden. Jeder Nachrichtentext ist als Instanz von XmlReader angelegt, wobei der Stream, der von der XmlReader-Instanz eingebunden wird, keiner vordefinierten Größenbeschränkung unterliegt. Bestimmte Channelanbieter können jedoch die Größe der Nachrichten, die sie verarbeiten, beschränken.
Eine Message kann mit nützlichen Informationen kommentiert werden, die von einer Entität generiert werden, die die Nachricht überprüft und verarbeitet hat. Diese Funktionen werden von der Headers-Eigenschaft und Properties-Eigenschaft zur Verfügung gestellt. Die Headers-Auflistung stellt den Satz von SOAP-Headern in der Nachricht dar.
Die Properties-Eigenschaft stellt den Satz von Anmerkungen auf Verarbeitungsebene über die Nachricht dar. Da Informationen in Headern über das Netzwerk gesendet werden, muss eine Entität, die einen Header überprüft, die zugrunde liegende(n) Version(en) der vom Header verwendeten Protokolle unterstützen. Eigenschaften bieten jedoch eine weniger versionsabhängige Möglichkeit zum Kommentieren einer Nachricht.
Verwenden Sie zum Erstellen einer Message-Instanz eine der CreateMessage-Methoden.
Es wird empfohlen, dass ein Consumer einer Nachricht immer Close aufruft, wenn der Consumer nicht mehr auf den Nachrichteninhalt zugreift. Hierdurch werden finite Systemressourcen (beispielsweise Sockets und Named Pipes) freigegeben, die mit der Lebensdauer der Nachricht verknüpft sind.
Spezieller Hinweis für Benutzer von Managed C++, die von dieser Klasse ableiten:
Fügen Sie den Bereinigungscode in (On)(Begin)Close (and/or OnAbort) ein, nicht in einen Destruktor.
Vermeiden Sie Destruktoren: Sie bewirken, dass der Compiler IDisposable automatisch generiert.
Vermeiden Sie Member ohne Verweis: Sie können bewirken, dass der Compiler IDisposable automatisch generiert.
Vermeiden Sie Finalizer. Wenn Sie dennoch einen Finalizer verwenden, sollten Sie die Buildwarnung unterdrücken und SuppressFinalize(Object) sowie den Finalizer selbst über (On)(Begin)Close (and/or OnAbort) aufrufen, um das ansonsten automatisch generierte IDisposable-Verhalten zu emulieren.
Hinweise für Ausführende
Wenn Sie von Message erben, müssen Sie folgende Member überschreiben: Headers und Version.
Konstruktoren
Message() |
Initialisiert eine neue Instanz der Message-Klasse. |
Eigenschaften
Headers |
Ruft beim Überschreiben in einer abgeleiteten Klasse die Header der Nachricht ab. |
IsDisposed |
Gibt einen Wert zurück, der angibt, ob Message verworfen wurde. |
IsEmpty |
Gibt einen Wert zurück, der angibt, ob Message leer ist. |
IsFault |
Ruft einen Wert ab, der angibt, ob diese Nachricht SOAP-Fehler generiert. |
Properties |
Ruft beim Überschreiben in einer abgeleiteten Klasse einen Satz von Anmerkungen auf Vearbeitungsebene für die Nachricht ab. |
State |
Ruft den aktuellen Status dieser Message ab. |
Version |
Ruft beim Überschreiben in einer abgeleiteten Klasse die SOAP-Version der Nachricht ab. |
Methoden
BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Startet das asynchrone Schreiben der Inhalte des Nachrichtentexts. |
BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Startet das asynchrone Schreiben der gesamten Nachricht. |
Close() |
Schließt Message und gibt alle Ressourcen frei. |
CreateBufferedCopy(Int32) |
Speichert eine gesamte Message in einem Speicherpuffer für den späteren Zugriff. |
CreateMessage(MessageVersion, FaultCode, String, Object, String) |
Erstellt eine Nachricht, die einen SOAP-Fehler, einen Grund und Details für den Fehler, eine Version und eine Aktion enthält. |
CreateMessage(MessageVersion, FaultCode, String, String) |
Erstellt eine Nachricht, die einen SOAP-Fehler, einen Grund für den Fehler, eine Version und eine Aktion enthält. |
CreateMessage(MessageVersion, MessageFault, String) |
Erstellt eine Nachricht, die einen SOAP-Fehler, eine Version und eine Aktion enthält. |
CreateMessage(MessageVersion, String) |
Erstellt eine Nachricht, die eine Version und eine Aktion enthält. |
CreateMessage(MessageVersion, String, BodyWriter) |
Erstellt eine Nachricht mit einem Text, der aus einem Array von Byte besteht. |
CreateMessage(MessageVersion, String, Object) |
Erstellt eine Nachricht mit der angegebenen Version, Aktion und angegebenem Text. |
CreateMessage(MessageVersion, String, Object, XmlObjectSerializer) |
Erstellt eine Nachricht mit der angegebenen Version, Aktion, dem Nachrichtentext und Serialisierungsprogramm. |
CreateMessage(MessageVersion, String, XmlDictionaryReader) |
Erstellt eine Nachricht mit der angegebenen Version, Aktion und angegebenem Text. |
CreateMessage(MessageVersion, String, XmlReader) |
Erstellt eine Nachricht mit dem angegebenen Reader, der Aktion und Version. |
CreateMessage(XmlDictionaryReader, Int32, MessageVersion) |
Erstellt eine Nachricht mit dem angegebenen Reader, der Aktion und Version. |
CreateMessage(XmlReader, Int32, MessageVersion) |
Erstellt eine Nachricht mit dem angegebenen Reader, der Aktion und Version. |
EndWriteBodyContents(IAsyncResult) |
Beendet das asynchrone Schreiben der Inhalte des Nachrichtentexts. |
EndWriteMessage(IAsyncResult) |
Beendet das asynchrone Schreiben der gesamten Nachricht. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetBody<T>() |
Ruft den Text dieser Message-Instanz ab. |
GetBody<T>(XmlObjectSerializer) |
Ruft den Text dieser Message mit dem angegebenen Serialisierungsprogramm ab. |
GetBodyAttribute(String, String) |
Ruft die Attribute des Nachrichtentexts ab. |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetReaderAtBodyContents() |
Ruft den XML-Wörterbuchreader ab, der auf den Textinhalt dieser Nachricht zugreift. |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Löst ein Ereignis aus, wenn die Meldung mit dem Schreiben der Inhalte des Nachrichtentexts beginnt. |
OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Löst ein Ereignis aus, wenn das Schreiben von gesamten Nachrichten beginnt. |
OnBodyToString(XmlDictionaryWriter) |
Wird aufgerufen, wenn der Nachrichtentext in eine Zeichenfolge konvertiert wird. |
OnClose() |
Wird aufgerufen, wenn die Nachricht geschlossen wird. |
OnCreateBufferedCopy(Int32) |
Wird aufgerufen, wenn ein Nachrichtenpuffer erstellt wird, um diese Nachricht zu speichern. |
OnEndWriteBodyContents(IAsyncResult) |
Löst ein Ereignis aus, wenn das Schreiben der Inhalte des Nachrichtentextes beendet wird. |
OnEndWriteMessage(IAsyncResult) |
Löst ein Ereignis aus, wenn das Schreiben der gesamten Nachricht beendet wird. |
OnGetBody<T>(XmlDictionaryReader) |
Wird aufgerufen, wenn der Nachrichtentext abgerufen wird. |
OnGetBodyAttribute(String, String) |
Wird aufgerufen, wenn die Attribute des Nachrichtentexts abgerufen werden. |
OnGetReaderAtBodyContents() |
Wird aufgerufen, wenn ein XML-Wörterbuchreader abgerufen wird, der auf den Textinhalt dieser Nachricht zugreift. |
OnWriteBodyContents(XmlDictionaryWriter) |
Wird aufgerufen, wenn der Nachrichtentext in eine XML-Datei geschrieben wird. |
OnWriteMessage(XmlDictionaryWriter) |
Wird aufgerufen, wenn die gesamte Nachricht in eine XML-Datei geschrieben wird. |
OnWriteStartBody(XmlDictionaryWriter) |
Wird aufgerufen, wenn der Starttext in eine XML-Datei geschrieben wird. |
OnWriteStartEnvelope(XmlDictionaryWriter) |
Wird aufgerufen, wenn der Startumschlag in eine XML-Datei geschrieben wird. |
OnWriteStartHeaders(XmlDictionaryWriter) |
Wird aufgerufen, wenn der Startheader in eine XML-Datei geschrieben wird. |
ToString() |
Gibt eine Zeichenfolge zurück, die die aktuelle Message-Instanz darstellt. |
WriteBody(XmlDictionaryWriter) |
Schreibt das Textelement mit dem angegebenen XmlDictionaryWriter. |
WriteBody(XmlWriter) |
Serialisiert den Nachrichtentext mit dem angegebenen XmlWriter. |
WriteBodyContents(XmlDictionaryWriter) |
Serialisiert den Textinhalt mit dem angegebenen XmlDictionaryWriter. |
WriteMessage(XmlDictionaryWriter) |
Serialisiert die gesamte Nachricht mit dem angegebenen XmlDictionaryWriter. |
WriteMessage(XmlWriter) |
Serialisiert die gesamte Nachricht mit dem angegebenen XmlWriter. |
WriteStartBody(XmlDictionaryWriter) |
Serialisiert den Anfangstext der Nachricht mit dem angegebenen XmlDictionaryWriter. |
WriteStartBody(XmlWriter) |
Serialisiert den Anfangstext der Nachricht mit dem angegebenen XmlDictionaryWriter. |
WriteStartEnvelope(XmlDictionaryWriter) |
Serialisiert den Startumschlag mit dem angegebenen XmlDictionaryWriter. |
Explizite Schnittstellenimplementierungen
IDisposable.Dispose() |
Schließt alle Ressourcen, die von dieser Nachricht verwendet werden. Diese Methode kann nicht vererbt werden. |
Erweiterungsmethoden
ToHttpRequestMessage(Message) |
Erstellt eine HttpRequestMessage-Instanz aus einer Message-Instanz. |
ToHttpResponseMessage(Message) |
Erstellt eine HttpResponseMessage-Instanz aus einer Message-Instanz. |