Message.GetBody Méthode

Définition

Récupère le corps de cette Message instance.

Surcharges

Nom Description
GetBody<T>()

Récupère le corps de cette Message instance.

GetBody<T>(XmlObjectSerializer)

Récupère le corps de cette Message opération à l’aide du sérialiseur spécifié.

Exemples

L’exemple de code suivant montre un client qui utilise la fabrique de canaux pour envoyer un message et lire la réponse.

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

Remarques

Une fois qu’un message est créé, le corps du message peut être lu à l’aide des GetBody méthodes du message retourné. L’objet retourné encapsule tous les éléments enfants dans l’élément Body . Étant donné que le corps d’un message est un flux, il ne peut être écrit qu’une seule fois ou lu une seule fois.

Utilisez la surcharge lors de l’utilisation GetBody<T>(XmlObjectSerializer) de messages JSON ; la GetBody<T>() surcharge ne fonctionne pas.

GetBody<T>()

Récupère le corps de cette Message instance.

public:
generic <typename T>
 T GetBody();
public T GetBody<T>();
member this.GetBody : unit -> 'T
Public Function GetBody(Of T) () As T

Paramètres de type

T

Corps du message.

Retours

T

Objet de type T qui contient le corps de ce message.

Remarques

Une Message instance a un corps qui correspond au corps SOAP. Il est accessible en tant qu’appel XmlDictionaryReaderGetReaderAtBodyContents. Elle est initialement positionnée directement après l’élément <S:Body> , et elle revient EOF à atteindre l’élément </S:Body> . Sinon, si vous attendez que le corps contienne un objet sérialisé, vous pouvez appeler GetBody à la place. Vous devez savoir qu’un corps de message ne peut être accessible qu’une seule fois et qu’un message ne peut être écrit qu’une seule fois. Si vous souhaitez accéder à plusieurs Body fois, utilisez cette option CreateBufferedCopy pour créer une MessageBuffer instance.

Utilisez la surcharge lors de l’utilisation GetBody<T>(XmlObjectSerializer) de messages JSON ; la GetBody<T>() surcharge ne fonctionne pas.

S’applique à

GetBody<T>(XmlObjectSerializer)

Récupère le corps de cette Message opération à l’aide du sérialiseur spécifié.

public:
generic <typename T>
 T GetBody(System::Runtime::Serialization::XmlObjectSerializer ^ serializer);
public T GetBody<T>(System.Runtime.Serialization.XmlObjectSerializer serializer);
member this.GetBody : System.Runtime.Serialization.XmlObjectSerializer -> 'T
Public Function GetBody(Of T) (serializer As XmlObjectSerializer) As T

Paramètres de type

T

Corps du message.

Paramètres

serializer
XmlObjectSerializer

Objet XmlObjectSerializer utilisé pour lire le corps du message.

Retours

T

Objet de type T qui contient le corps de ce message.

Exceptions

serializer a la valeur null.

Remarques

Une Message instance a un corps qui correspond au corps SOAP. Il est accessible en tant qu’appel XmlDictionaryReaderGetReaderAtBodyContents. Elle est initialement positionnée directement après l’élément <S:Body> , et elle revient EOF à atteindre l’élément </S:Body> . Sinon, si vous attendez que le corps contienne un objet sérialisé, vous pouvez appeler GetBody à la place. Vous devez savoir qu’un corps de message ne peut être accessible qu’une seule fois et qu’un message ne peut être écrit qu’une seule fois. Si vous souhaitez accéder au corps plusieurs fois, utilisez-le CreateBufferedCopy pour créer une MessageBuffer instance.

Utilisez la surcharge lors de l’utilisation GetBody<T>(XmlObjectSerializer) de messages JSON ; la GetBody<T>() surcharge ne fonctionne pas.

S’applique à