Message クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
分散環境でのエンドポイント間の通信の単位を表します。
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 バージョンを取得します。 |
メソッド
明示的なインターフェイスの実装
IDisposable.Dispose() |
このメッセージが使用したすべてのリソースを閉じます。 このメソッドは継承できません。 |
拡張メソッド
ToHttpRequestMessage(Message) |
HttpRequestMessage インスタンスから Message インスタンスを作成します。 |
ToHttpResponseMessage(Message) |
HttpResponseMessage インスタンスから Message インスタンスを作成します。 |
適用対象
.NET