Message Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje jednostkę komunikacji między punktami końcowymi w środowisku rozproszonym.
public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
interface IDisposable
Public MustInherit Class Message
Implements IDisposable
- Dziedziczenie
-
Message
- Implementuje
Przykłady
Poniższy przykład kodu przedstawia klienta, który używa fabryki kanałów do wysyłania wiadomości i odczytywania odpowiedzi.
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
Uwagi
Klasa Message zapewnia sposób komunikowania dowolnych informacji między nadawcą a odbiornikiem w sieci. Może służyć do przekazywania informacji, sugerowania lub żądania akcji lub żądania danych.
Struktura Message obiektu reprezentuje kopertę protokołu SOAP. Składa się z dwóch odrębnych części: treści komunikatu i opcjonalnej kolekcji nagłówków reprezentowanych przez klasę Headers . Zawartość komunikatu to dane zdefiniowane przez aplikację wysyłane od nadawcy do odbiorcy. Nagłówki komunikatów umożliwiają rozszerzalność systemu i aplikacji w celu spełnienia zmieniających się wymagań, ponieważ można zdefiniować kod do manipulowania określonymi nagłówkami i odpowiadania na nie. Możesz również zdefiniować własne nagłówki. Nagłówki wiadomości są serializowane lub deserializowane wraz z zawartością wiadomości.
Komunikaty są odbierane i wysyłane w określonych formatach. Obsługa jest zapewniana dla dwóch formatów: standardowego formatu XML opartego na tekście i formatu XML opartego na plikach binarnych. Obiekt Message może służyć do reprezentowania kopert SOAP 1.1 i SOAP 1.2. Należy pamiętać, że wystąpienie klasy Message jest naprawione podczas tworzenia i jest powiązane z określoną wersją protokołu SOAP. Właściwość Version reprezentuje wersję protokołu SOAP komunikatu.
Obiekt Message można serializować do magazynu zewnętrznego przy użyciu WriteMessage metody . Właściwości komunikatu można również serializować, ale muszą być identyfikowane indywidualnie i serializowane oddzielnie. Deserializowanie komunikatu w celu utworzenia obiektu w pamięci Message można wykonać przy użyciu polecenia CreateMessage. Właściwości muszą również zostać zdeserializowane indywidualnie i ręcznie dodane do kolekcji właściwości dla określonego Message wystąpienia.
Rozmiar Message obiektu jest stały dla rozmiaru przesyłanych danych. Każda treść jest modelowana jako wystąpienie XmlReaderklasy , bez wstępnie zdefiniowanego limitu rozmiaru strumienia XmlReader , który jest zawijany przez wystąpienie. Jednak konkretni dostawcy kanałów mogą mieć limit rozmiaru komunikatów, które przetwarzają.
Element Message może być oznaczony adnotacjami z przydatnymi informacjami wygenerowanymi przez jednostkę, która przeanalizowała i przetworzyła komunikat. Ta funkcja jest udostępniana przez Headers właściwości i Properties . Kolekcja Headers reprezentuje zestaw nagłówków SOAP w komunikacie.
Właściwość Properties reprezentuje zestaw adnotacji na poziomie przetwarzania w komunikacie. Ponieważ informacje w nagłówkach są przesyłane w sieci, jednostka badająca nagłówek musi obsługiwać bazowe wersje protokołów używanych przez nagłówek. Jednak właściwości zapewniają bardziej niezależny od wersji sposób dodawania adnotacji do komunikatu.
Aby utworzyć Message wystąpienie, użyj jednej z CreateMessage metod.
Zaleca się, aby odbiorca komunikatu zawsze wywoływać Close po zakończeniu uzyskiwania dostępu do zawartości wiadomości. Ta akcja zwalnia ograniczone zasoby systemowe (na przykład gniazda, nazwane potoki), które są powiązane z okresem istnienia komunikatu.
Szczególna uwaga dla użytkowników zarządzanych języka C++ pochodnych z tej klasy:
Umieść kod oczyszczania w kodzie (On)(Begin)Close (i/lub OnAbort), a nie w destruktorze.
Unikaj destruktorów: powodują one automatyczne generowanie IDisposableprzez kompilator .
Unikaj elementów członkowskich innych niż odwołania: mogą spowodować, że kompilator automatycznie wygeneruje IDisposableelement .
Unikaj finalizatorów; Ale jeśli dołączysz jeden, pomiń ostrzeżenie kompilacji i wywołanie SuppressFinalize(Object) i finalizator z (On)(Begin)Close (i/lub OnAbort) w celu emulacji tego, co byłoby generowane IDisposable automatycznie.
Uwagi dotyczące implementowania
Podczas dziedziczenia z Messageprogramu należy zastąpić następujące elementy członkowskie: Headers, i Version.
Konstruktory
Message() |
Inicjuje nowe wystąpienie klasy Message. |
Właściwości
Headers |
Po przesłonięciu w klasie pochodnej pobiera nagłówki komunikatu. |
IsDisposed |
Zwraca wartość wskazującą, czy obiekt Message jest usuwany. |
IsEmpty |
Zwraca wartość wskazującą, czy wartość jest pusta Message . |
IsFault |
Pobiera wartość wskazującą, czy ten komunikat generuje błędy protokołu SOAP. |
Properties |
Po zastąpieniu w klasie pochodnej pobiera zestaw adnotacji na poziomie przetwarzania do komunikatu. |
State |
Pobiera bieżący stan tego Messageelementu . |
Version |
Po zastąpieniu w klasie pochodnej pobiera wersję protokołu SOAP komunikatu. |
Metody
BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Uruchamia asynchroniczne zapisywanie zawartości treści wiadomości. |
BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Uruchamia asynchroniczne zapisywanie całej wiadomości. |
Close() |
Zamyka i Message zwalnia wszystkie zasoby. |
CreateBufferedCopy(Int32) |
Przechowuje całe Message w buforze pamięci na potrzeby przyszłego dostępu. |
CreateMessage(MessageVersion, FaultCode, String, Object, String) |
Tworzy komunikat zawierający błąd protokołu SOAP, przyczynę i szczegóły błędu, wersję i akcję. |
CreateMessage(MessageVersion, FaultCode, String, String) |
Tworzy komunikat zawierający błąd protokołu SOAP, przyczynę błędu, wersję i akcję. |
CreateMessage(MessageVersion, MessageFault, String) |
Tworzy komunikat zawierający błąd protokołu SOAP, wersję i akcję. |
CreateMessage(MessageVersion, String) |
Tworzy komunikat zawierający wersję i akcję. |
CreateMessage(MessageVersion, String, BodyWriter) |
Tworzy komunikat z treścią składającą się z tablicy bajtów. |
CreateMessage(MessageVersion, String, Object) |
Tworzy komunikat z określoną wersją, akcją i treścią. |
CreateMessage(MessageVersion, String, Object, XmlObjectSerializer) |
Tworzy komunikat przy użyciu określonej wersji, akcji, treści komunikatu i serializatora. |
CreateMessage(MessageVersion, String, XmlDictionaryReader) |
Tworzy komunikat z określoną wersją, akcją i treścią. |
CreateMessage(MessageVersion, String, XmlReader) |
Tworzy komunikat przy użyciu określonego czytnika, akcji i wersji. |
CreateMessage(XmlDictionaryReader, Int32, MessageVersion) |
Tworzy komunikat przy użyciu określonego czytnika, akcji i wersji. |
CreateMessage(XmlReader, Int32, MessageVersion) |
Tworzy komunikat przy użyciu określonego czytnika, akcji i wersji. |
EndWriteBodyContents(IAsyncResult) |
Kończy asynchroniczne zapisywanie zawartości treści wiadomości. |
EndWriteMessage(IAsyncResult) |
Kończy asynchroniczne pisanie całej wiadomości. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetBody<T>() |
Pobiera treść tego Message wystąpienia. |
GetBody<T>(XmlObjectSerializer) |
Pobiera treść tego Message elementu przy użyciu określonego serializatora. |
GetBodyAttribute(String, String) |
Pobiera atrybuty treści komunikatu. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetReaderAtBodyContents() |
Pobiera czytnik słownika XML, który uzyskuje dostęp do treści tej wiadomości. |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object) |
Zgłasza zdarzenie, gdy komunikat rozpoczyna pisanie zawartości treści wiadomości. |
OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object) |
Wywołuje zdarzenie, na które rozpoczyna się zapisywanie całych komunikatów. |
OnBodyToString(XmlDictionaryWriter) |
Wywoływana, gdy treść komunikatu jest konwertowana na ciąg. |
OnClose() |
Wywoływana po zamknięciu komunikatu. |
OnCreateBufferedCopy(Int32) |
Wywoływana po utworzeniu buforu komunikatów w celu przechowywania tego komunikatu. |
OnEndWriteBodyContents(IAsyncResult) |
Zgłasza zdarzenie podczas zapisywania zawartości treści wiadomości kończy się. |
OnEndWriteMessage(IAsyncResult) |
Zgłasza zdarzenie po zakończeniu pisania całej wiadomości. |
OnGetBody<T>(XmlDictionaryReader) |
Wywoływana, gdy zostanie pobrana treść komunikatu. |
OnGetBodyAttribute(String, String) |
Wywoływana po pobraniu atrybutów treści komunikatu. |
OnGetReaderAtBodyContents() |
Wywoływana, gdy jest pobierany czytnik słownika XML, który uzyskuje dostęp do zawartości treści tej wiadomości. |
OnWriteBodyContents(XmlDictionaryWriter) |
Wywoływana, gdy treść komunikatu jest zapisywana w pliku XML. |
OnWriteMessage(XmlDictionaryWriter) |
Wywoływana, gdy cały komunikat jest zapisywany w pliku XML. |
OnWriteStartBody(XmlDictionaryWriter) |
Wywoływana, gdy treść początkowa jest zapisywana w pliku XML. |
OnWriteStartEnvelope(XmlDictionaryWriter) |
Wywoływana, gdy koperta początkowa jest zapisywana w pliku XML. |
OnWriteStartHeaders(XmlDictionaryWriter) |
Wywoływana, gdy nagłówek startowy jest zapisywany w pliku XML. |
ToString() |
Zwraca ciąg reprezentujący bieżące Message wystąpienie. |
WriteBody(XmlDictionaryWriter) |
Zapisuje element treści przy użyciu określonego XmlDictionaryWriterelementu . |
WriteBody(XmlWriter) |
Serializuje treść komunikatu przy użyciu określonego XmlWriterelementu . |
WriteBodyContents(XmlDictionaryWriter) |
Serializuje zawartość treści przy użyciu określonego XmlDictionaryWriterelementu . |
WriteMessage(XmlDictionaryWriter) |
Serializuje cały komunikat przy użyciu określonego XmlDictionaryWriterelementu . |
WriteMessage(XmlWriter) |
Serializuje cały komunikat przy użyciu określonego XmlWriterelementu . |
WriteStartBody(XmlDictionaryWriter) |
Serializuje treść początkową komunikatu przy użyciu określonego XmlDictionaryWriterelementu . |
WriteStartBody(XmlWriter) |
Serializuje treść początkową komunikatu przy użyciu określonego XmlDictionaryWriterelementu . |
WriteStartEnvelope(XmlDictionaryWriter) |
Serializuje kopertę początkową przy użyciu określonego XmlDictionaryWriterelementu . |
Jawne implementacje interfejsu
IDisposable.Dispose() |
Zamyka wszystkie zasoby używane przez ten komunikat. Tej metody nie można dziedziczyć. |
Metody rozszerzania
ToHttpRequestMessage(Message) |
Tworzy HttpRequestMessage wystąpienie na podstawie Message wystąpienia. |
ToHttpResponseMessage(Message) |
Tworzy HttpResponseMessage wystąpienie na podstawie Message wystąpienia. |