Message.GetBody メソッド

定義

この Message インスタンスの本文を取得します。Retrieves the body of this Message instance.

オーバーロード

GetBody<T>()

この Message インスタンスの本文を取得します。Retrieves the body of this Message instance.

GetBody<T>(XmlObjectSerializer)

指定したシリアライザーを使用して、この Message の本文を取得します。Retrieves the body of this Message using the specified serializer.

次のコード例は、メッセージを送信して応答を読み取るためにチャネル ファクトリを使用する基本的なクライアントを示しています。The following code example shows a client that uses the channel factory to send a message and read the reply.

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

注釈

メッセージを作成した後は、返されるメッセージに対して GetBody メソッドを使用することで、メッセージの本文を読み取ることができます。After a message is created, the message body can be read using the GetBody methods on the returned message. 返されるオブジェクトでは、Body 要素内のすべての子要素がカプセル化されます。The returned object encapsulates all the child elements within the Body element. メッセージの本文はストリームであるため、1 回だけ読み取りまたは書き込みが可能です。Because the body of a message is a stream, it can only be written once, or read once.

JSON メッセージを操作する場合は、GetBody<T>(XmlObjectSerializer) オーバーロードを使用します。GetBody<T>() オーバーロードは機能しません。Use the GetBody<T>(XmlObjectSerializer) overload when working with JSON messages; the GetBody<T>() overload does not work.

GetBody<T>()

この Message インスタンスの本文を取得します。Retrieves the body of this Message instance.

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

型パラメーター

T

メッセージの本文The body of the message.

戻り値

T

このメッセージの本文を格納している T 型のオブジェクト。An object of type T that contains the body of this message.

注釈

Message インスタンスには、SOAP 本文に対応する本文があります。A Message instance has a body that corresponds to the SOAP body. この本文は、XmlDictionaryReader を呼び出すことにより、GetReaderAtBodyContents としてアクセスされます。It can be accessed as an XmlDictionaryReader by calling GetReaderAtBodyContents. 本文は最初、<S:Body> 要素の直後に配置され、EOF 要素に達すると </S:Body> を返します。It is initially positioned directly after the <S:Body> element, and it returns EOF on reaching the </S:Body> element. また、シリアル化されたオブジェクトを含む本文が予測される場合は、代わりに GetBody を呼び出すことができます。Alternatively, if you expect the body to contain a serialized object, you can call GetBody instead. メッセージ本文は 1 回だけアクセスでき、メッセージは 1 回だけ書き込むことができることに注意してください。You should be aware that a message body can only be accessed once and a message can only be written once. Body に複数回アクセスする場合は、CreateBufferedCopy を使用して MessageBuffer インスタンスを作成します。If you want to access the Body multiple times, use CreateBufferedCopy to create a MessageBuffer instance.

JSON メッセージを操作する場合は、GetBody<T>(XmlObjectSerializer) オーバーロードを使用します。GetBody<T>() オーバーロードは機能しません。Use the GetBody<T>(XmlObjectSerializer) overload when working with JSON messages; the GetBody<T>() overload does not work.

適用対象

GetBody<T>(XmlObjectSerializer)

指定したシリアライザーを使用して、この Message の本文を取得します。Retrieves the body of this Message using the specified serializer.

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

型パラメーター

T

メッセージの本文The body of the message.

パラメーター

serializer
XmlObjectSerializer

メッセージの本文を読み取るために使用される XmlObjectSerializer オブジェクト。A XmlObjectSerializer object used to read the body of the message.

戻り値

T

このメッセージの本文を格納している T 型のオブジェクト。An object of type T that contains the body of this message.

例外

serializernullです。serializer is null.

注釈

Message インスタンスには、SOAP 本文に対応する本文があります。A Message instance has a body that corresponds to the SOAP body. この本文は、XmlDictionaryReader を呼び出すことにより、GetReaderAtBodyContents としてアクセスされます。It can be accessed as an XmlDictionaryReader by calling GetReaderAtBodyContents. 本文は最初、<S:Body> 要素の直後に配置され、EOF 要素に達すると </S:Body> を返します。It is initially positioned directly after the <S:Body> element, and it returns EOF on reaching the </S:Body> element. また、シリアル化されたオブジェクトを含む本文が予測される場合は、代わりに GetBody を呼び出すことができます。Alternatively, if you expect the body to contain a serialized object, you can call GetBody instead. メッセージ本文は 1 回だけアクセスでき、メッセージは 1 回だけ書き込むことができることに注意してください。You should be aware that a message body can only be accessed once and a message can only be written once. 本文に複数回アクセスする場合は、CreateBufferedCopy を使用して MessageBuffer インスタンスを作成します。If you want to access the body multiple times, use CreateBufferedCopy to create a MessageBuffer instance.

JSON メッセージを操作する場合は、GetBody<T>(XmlObjectSerializer) オーバーロードを使用します。GetBody<T>() オーバーロードは機能しません。Use the GetBody<T>(XmlObjectSerializer) overload when working with JSON messages; the GetBody<T>() overload does not work.

適用対象