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ę 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 dostępna 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 elementu jest naprawione po utworzeniu Message 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 WriteMessage przy użyciu metody . Właściwości komunikatu można również serializować, ale muszą być identyfikowane indywidualnie i serializowane oddzielnie. Deserializacji komunikatu w celu utworzenia obiektu w pamięci Message można wykonać przy użyciu polecenia CreateMessage. Właściwości muszą być również deserializowane 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 klasy XmlReader, bez wstępnie zdefiniowanego limitu rozmiaru strumienia, który XmlReader jest zawijany przez wystąpienie. Jednak konkretni dostawcy kanałów mogą mieć limit rozmiaru komunikatów, które przetwarzają.

Można Message dodać adnotacje do przydatnych informacji generowanych przez jednostkę, która przeanalizowała i przetworzyła komunikat. Ta funkcja jest dostarczana 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 użytkownik 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.

Uwaga specjalna dla użytkowników zarządzanego języka C++ pochodzącego z tej klasy:

  • Umieść kod oczyszczania w (On)(Begin)Close (i/lub OnAbort), a nie w destruktorze.

  • Unikaj destruktorów: powodują one automatyczne generowanie IDisposablekompilatora .

  • Unikaj elementów członkowskich innych niż odwołania: mogą powodować automatyczne generowanie IDisposablekompilatora .

  • Unikaj finalizatorów; ale jeśli uwzględnisz jedno, pomiń ostrzeżenie i wywołanie SuppressFinalize(Object) kompilacji oraz sam finalizator z (On)(Begin)Close (i/lub OnAbort), aby naśladować zachowanie wygenerowane IDisposable automatycznie.

Uwagi dotyczące implementowania

Po dziedziczeniu 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 zastąpieniu w klasie pochodnej pobiera nagłówki komunikatu.

IsDisposed

Zwraca wartość wskazującą, czy Message obiekt 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 Messageobiektu .

Version

Po przesłonięciu w klasie pochodnej pobiera wersję komunikatu SOAP.

Metody

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Uruchamia asynchroniczne zapisywanie zawartości treści wiadomości.

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

Uruchamia asynchroniczne pisanie całej wiadomości.

Close()

Zamyka element Message i zwalnia wszystkie zasoby.

CreateBufferedCopy(Int32)

Przechowuje cały Message bufor pamięci w celu uzyskania 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 zawartości treści tego komunikatu.

GetType()

Type Pobiera bieżące wystąpienie.

(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)

Zgłasza 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 do 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 zapisywania całej wiadomości.

OnGetBody<T>(XmlDictionaryReader)

Wywoływana, gdy zostanie pobrana treść wiadomości.

OnGetBodyAttribute(String, String)

Wywoływana po pobraniu atrybutów treści komunikatu.

OnGetReaderAtBodyContents()

Wywoływana, gdy zostanie pobrany czytnik słownika XML, który uzyskuje dostęp do zawartości treści tego komunikatu.

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ływane, 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. Nie można dziedziczyć tej metody.

Metody rozszerzania

ToHttpRequestMessage(Message)

HttpRequestMessage Tworzy wystąpienie z Message wystąpienia.

ToHttpResponseMessage(Message)

HttpResponseMessage Tworzy wystąpienie z Message wystąpienia.

Dotyczy