次の方法で共有


Message.GetBody メソッド

定義

この Message インスタンスの本文を取得します。

オーバーロード

GetBody<T>(XmlObjectSerializer)

指定したシリアライザーを使用して、この Message の本文を取得します。

GetBody<T>()

この Message インスタンスの本文を取得します。

次のコード例は、メッセージを送信して応答を読み取るためにチャネル ファクトリを使用する基本的なクライアントを示しています。

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 メソッドを使用することで、メッセージの本文を読み取ることができます。 返されるオブジェクトでは、Body 要素内のすべての子要素がカプセル化されます。 メッセージの本文はストリームであるため、1 回だけ読み取りまたは書き込みが可能です。

JSON メッセージを操作する場合は、GetBody<T>(XmlObjectSerializer) オーバーロードを使用します。GetBody<T>() オーバーロードは機能しません。

GetBody<T>(XmlObjectSerializer)

ソース:
Message.cs
ソース:
Message.cs
ソース:
Message.cs

指定したシリアライザーを使用して、この Message の本文を取得します。

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

メッセージの本文

パラメーター

serializer
XmlObjectSerializer

メッセージの本文を読み取るために使用される XmlObjectSerializer オブジェクト。

戻り値

T

このメッセージの本文を格納している T 型のオブジェクト。

例外

serializernull です。

注釈

Message インスタンスには、SOAP 本文に対応する本文があります。 この本文は、XmlDictionaryReader を呼び出すことにより、GetReaderAtBodyContents としてアクセスされます。 本文は最初、<S:Body> 要素の直後に配置され、EOF 要素に達すると </S:Body> を返します。 また、シリアル化されたオブジェクトを含む本文が予測される場合は、代わりに GetBody を呼び出すことができます。 メッセージ本文は 1 回だけアクセスでき、メッセージは 1 回だけ書き込むことができることに注意してください。 本文に複数回アクセスする場合は、CreateBufferedCopy を使用して MessageBuffer インスタンスを作成します。

JSON メッセージを操作する場合は、GetBody<T>(XmlObjectSerializer) オーバーロードを使用します。GetBody<T>() オーバーロードは機能しません。

適用対象

GetBody<T>()

ソース:
Message.cs
ソース:
Message.cs
ソース:
Message.cs

この Message インスタンスの本文を取得します。

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

型パラメーター

T

メッセージの本文

戻り値

T

このメッセージの本文を格納している T 型のオブジェクト。

注釈

Message インスタンスには、SOAP 本文に対応する本文があります。 この本文は、XmlDictionaryReader を呼び出すことにより、GetReaderAtBodyContents としてアクセスされます。 本文は最初、<S:Body> 要素の直後に配置され、EOF 要素に達すると </S:Body> を返します。 また、シリアル化されたオブジェクトを含む本文が予測される場合は、代わりに GetBody を呼び出すことができます。 メッセージ本文は 1 回だけアクセスでき、メッセージは 1 回だけ書き込むことができることに注意してください。 Body に複数回アクセスする場合は、CreateBufferedCopy を使用して MessageBuffer インスタンスを作成します。

JSON メッセージを操作する場合は、GetBody<T>(XmlObjectSerializer) オーバーロードを使用します。GetBody<T>() オーバーロードは機能しません。

適用対象