Message クラス

定義

分散環境でのエンドポイント間の通信の単位を表します。

public ref class Message abstract : IDisposable
public abstract class Message : IDisposable
type Message = class
    interface IDisposable
Public MustInherit Class Message
Implements IDisposable
継承
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

注釈

Message クラスは、ネットワーク上で送信側と受信側の間で任意の情報を通信するための方法を提供します。 情報の転送、対処方法の提案または要求、またはデータの要求のために使用できます。

Message オブジェクトの構造は、SOAP エンベロープを表します。 このオブジェクトは、メッセージの本文と、Headers クラスで表されるオプションのヘッダーのコレクションという 2 つの別個の部分で構成されます。 このメッセージの内容は、送信側から受信側に送られるアプリケーションで定義されたデータです。 メッセージ ヘッダーによりシステムやアプリケーションが拡張可能となり、変化する要件に適合できます。これは、特定のヘッダーを処理して応答するコードを定義できるためです。 独自のヘッダーを定義することもできます。 メッセージ ヘッダーは、メッセージの内容と一緒にシリアル化および逆シリアル化されます。

メッセージは、特定の形式で送受信されます。 標準のテキスト ベースの XML 形式と、バイナリ ベースの XML 形式という 2 つの形式がサポートされます。 SOAP 1.1 および SOAP 1.2 の両エンベロープを表すために Message オブジェクトを使用できます。 Message のインスタンスは、作成時に修正され、特定の SOAP バージョンに関連付けられることに注意してください。 Version プロパティは、メッセージの SOAP バージョンを表します。

Message オブジェクトは、WriteMessage メソッドを使用することにより、外部ストアにシリアル化できます。 メッセージのプロパティもシリアル化できますが、個々に識別し、個別にシリアル化する必要があります。 メモリ内 Message オブジェクトを作成するためのメッセージの逆シリアル化は、CreateMessage を使用して実行できます。 プロパティは、やはり、個別に逆シリアル化し、特定の Message インスタンスに対するプロパティ コレクションに手動で追加する必要があります。

Message オブジェクトのサイズは、それが送信するデータのサイズに固定されます。 すべての本文は XmlReader のインスタンスとしてモデル化され、XmlReader のインスタンスがラップするストリームのサイズには事前に定義された制限はありません。 ただし、特定のチャネル プロバイダーでは、各自が処理するメッセージのサイズが制限されている可能性があります。

Message には、メッセージを調査して処理したエンティティが生成する有用な情報で注釈を付けることができます。 この機能は、Headers プロパティと Properties プロパティによって提供されます。 Headers コレクションは、メッセージの一連の SOAP ヘッダーを表します。

Properties プロパティは、メッセージに対する処理レベルの注釈を表します。 ヘッダー内の情報はネットワークを介して送信されるので、ヘッダーを調査するエンティティは、ヘッダーにより使用されるプロトコルの基になるバージョンをサポートする必要があります。 ただし、プロパティはメッセージを注釈するバージョンに対して、より独立した方法を提供しています。

Message インスタンスを作成するには、いずれかの CreateMessage メソッドを使用します。

メッセージのコンシューマーは、メッセージの内容へのアクセスが終了したら必ず、Close を呼び出すことをお勧めします。 このようにすることで、メッセージの有効期間に関連付けられている有限のシステム リソース (ソケットや名前付きパイプなど) が解放されます。

このクラスから派生するマネージド C++ ユーザーに対する特別な注意 :

  • クリーンアップ コードは、デストラクターではなく (On)(Begin)Close (または OnAbort のどちらか一方または両方) に置いてください。

  • デストラクターは使用しないでください。使用すると、コンパイラが IDisposable を自動生成します。

  • 非参照メンバーを使用しないでください。使用すると、コンパイラが IDisposable を自動生成します。

  • ファイナライザーを使用しないでください。使用する場合は、ビルド警告を抑制し、SuppressFinalize(Object) を呼び出し、ファイナライザー自体を (On)(Begin)Close (または OnAbort のどちらか一方または両方) から呼び出して、自動生成される IDisposable の動作をエミュレートする必要があります。

注意 (実装者)

Message から継承する場合は、Headers メンバーと Version メンバーをオーバーライドする必要があります。

コンストラクター

Message()

Message クラスの新しいインスタンスを初期化します。

プロパティ

Headers

派生クラスでオーバーライドされた場合、メッセージのヘッダーを取得します。

IsDisposed

Message オブジェクトが破棄されかどうかを示す値を返します。

IsEmpty

Message が空かどうかを示す値を返します。

IsFault

このメッセージが何らかの SOAP エラーを生成するかどうか示す値を取得します。

Properties

派生クラスでオーバーライドされた場合、メッセージに対する処理レベルの注釈セットを取得します。

State

この Message の現在の状態を取得します。

Version

派生クラスでオーバーライドされた場合は、メッセージの SOAP バージョンを取得します。

メソッド

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

メッセージ本文のコンテンツの非同期書き込みを開始します。

BeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

メッセージ全体の非同期書き込みを開始します。

Close()

Message を閉じて、すべてのリソースを解放します。

CreateBufferedCopy(Int32)

今後アクセスできるように、Message 全体をメモリ バッファーに格納します。

CreateMessage(MessageVersion, FaultCode, String, Object, String)

SOAP エラー、エラーの理由と詳細、バージョン、およびアクションを含むメッセージを作成します。

CreateMessage(MessageVersion, FaultCode, String, String)

SOAP エラー、エラーの理由、バージョン、およびアクションを含むメッセージを作成します。

CreateMessage(MessageVersion, MessageFault, String)

SOAP エラー、バージョン、およびアクションを含むメッセージを作成します。

CreateMessage(MessageVersion, String)

バージョンとアクションを含むメッセージを作成します。

CreateMessage(MessageVersion, String, BodyWriter)

本文がバイト配列で構成されるメッセージを作成します。

CreateMessage(MessageVersion, String, Object)

指定したバージョン、アクション、および本文を使用して、メッセージを作成します。

CreateMessage(MessageVersion, String, Object, XmlObjectSerializer)

指定したバージョン、アクション、メッセージ本文、およびシリアライザーを使用して、メッセージを作成します。

CreateMessage(MessageVersion, String, XmlDictionaryReader)

指定したバージョン、アクション、および本文を使用して、メッセージを作成します。

CreateMessage(MessageVersion, String, XmlReader)

指定したリーダー、アクション、およびバージョンを使用して、メッセージを作成します。

CreateMessage(XmlDictionaryReader, Int32, MessageVersion)

指定したリーダー、アクション、およびバージョンを使用して、メッセージを作成します。

CreateMessage(XmlReader, Int32, MessageVersion)

指定したリーダー、アクション、およびバージョンを使用して、メッセージを作成します。

EndWriteBodyContents(IAsyncResult)

メッセージ本文のコンテンツの非同期書き込みを終了します。

EndWriteMessage(IAsyncResult)

メッセージ全体の非同期書き込みを終了します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetBody<T>()

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

GetBody<T>(XmlObjectSerializer)

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

GetBodyAttribute(String, String)

メッセージ本文の属性を取得します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetReaderAtBodyContents()

このメッセージの本文の内容にアクセスする XML ディクショナリ リーダーを取得します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

メッセージがメッセージ本文の内容の書き込みを開始するときイベントを発生させます。

OnBeginWriteMessage(XmlDictionaryWriter, AsyncCallback, Object)

メッセージ全体の書き込みを開始するイベントを発生させます。

OnBodyToString(XmlDictionaryWriter)

メッセージ本文が文字列に変換されるときに呼び出されます。

OnClose()

メッセージが閉じるときに呼び出されます。

OnCreateBufferedCopy(Int32)

このメッセージを格納するためにメッセージ バッファーが作成されるときに呼び出されます。

OnEndWriteBodyContents(IAsyncResult)

メッセージ本文の内容の書き込みが終了するときイベントを発生させます。

OnEndWriteMessage(IAsyncResult)

メッセージ全体の書き込みが終了するときイベントを発生させます。

OnGetBody<T>(XmlDictionaryReader)

メッセージの本文が取得されるときに呼び出されます。

OnGetBodyAttribute(String, String)

メッセージ本文の属性が取得されるときに呼び出されます。

OnGetReaderAtBodyContents()

このメッセージの本文の内容にアクセスする XML ディクショナリ リーダーが取得されるときに呼び出されます。

OnWriteBodyContents(XmlDictionaryWriter)

メッセージ本文が XML ファイルに書き込まれるときに呼び出されます。

OnWriteMessage(XmlDictionaryWriter)

メッセージ全体が XML ファイルに書き込まれるときに呼び出されます。

OnWriteStartBody(XmlDictionaryWriter)

開始本文が XML ファイルに書き込まれるときに呼び出されます。

OnWriteStartEnvelope(XmlDictionaryWriter)

開始エンベロープが XML ファイルに書き込まれるときに呼び出されます。

OnWriteStartHeaders(XmlDictionaryWriter)

開始ヘッダーが XML ファイルに書き込まれるときに呼び出されます。

ToString()

現在の Message インスタンスを表す文字列を返します。

WriteBody(XmlDictionaryWriter)

指定した XmlDictionaryWriter を使用して、本文要素を書き込みます。

WriteBody(XmlWriter)

指定した XmlWriter を使用して、メッセージ本文をシリアル化します。

WriteBodyContents(XmlDictionaryWriter)

指定した XmlDictionaryWriter を使用して、本文の内容をシリアル化します。

WriteMessage(XmlDictionaryWriter)

指定した XmlDictionaryWriter を使用して、メッセージ全体をシリアル化します。

WriteMessage(XmlWriter)

指定した XmlWriter を使用して、メッセージ全体をシリアル化します。

WriteStartBody(XmlDictionaryWriter)

指定した XmlDictionaryWriter を使用して、メッセージの開始本文をシリアル化します。

WriteStartBody(XmlWriter)

指定した XmlDictionaryWriter を使用して、メッセージの開始本文をシリアル化します。

WriteStartEnvelope(XmlDictionaryWriter)

指定した XmlDictionaryWriter を使用して、開始エンベロープをシリアル化します。

明示的なインターフェイスの実装

IDisposable.Dispose()

このメッセージが使用したすべてのリソースを閉じます。 このメソッドは継承できません。

拡張メソッド

ToHttpRequestMessage(Message)

HttpRequestMessage インスタンスから Message インスタンスを作成します。

ToHttpResponseMessage(Message)

HttpResponseMessage インスタンスから Message インスタンスを作成します。

適用対象