Message Klasa

Definicja

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.

OnWriteBodyContentsAsync(XmlDictionaryWriter)

Reprezentuje jednostkę komunikacji między punktami końcowymi w środowisku rozproszonym.

OnWriteMessage(XmlDictionaryWriter)

Wywoływana, gdy cały komunikat jest zapisywany w pliku XML.

OnWriteMessageAsync(XmlDictionaryWriter)

Reprezentuje jednostkę komunikacji między punktami końcowymi w środowisku rozproszonym.

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 .

WriteBodyContentsAsync(XmlDictionaryWriter)

Reprezentuje jednostkę komunikacji między punktami końcowymi w środowisku rozproszonym.

WriteMessage(XmlDictionaryWriter)

Serializuje cały komunikat przy użyciu określonego XmlDictionaryWriterelementu .

WriteMessage(XmlWriter)

Serializuje cały komunikat przy użyciu określonego XmlWriterelementu .

WriteMessageAsync(XmlDictionaryWriter)

Reprezentuje jednostkę komunikacji między punktami końcowymi w środowisku rozproszonym.

WriteMessageAsync(XmlWriter)

Reprezentuje jednostkę komunikacji między punktami końcowymi w środowisku rozproszonym.

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.

Dotyczy