AMQP 1.0 でレガシ WindowsAzure.ServiceBus .NET フレームワーク ライブラリを使用

Note

この記事は、同じパッケージ内の AMQP に切り替えて使用する場合の WindowsAzure.ServiceBus パッケージの既存のユーザー向けです。 このパッケージは 2026 年 9 月 30 日まで重要なバグの修正プログラムを受け取り続けますが、代わりに新しい Azure.Messaging.ServiceBus パッケージにアップグレードすることを強くお勧めします。これは 2020 年 11 月から利用可能であり、既定で AMQP がサポートされています。

2026 年 9 月 30 日に、Azure SDK ガイドラインに準拠していない Azure Service Bus SDK ライブラリ WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus、および com.microsoft.azure.servicebus は廃止されます。 SBMP プロトコルのサポートも終了するため、2026 年 9 月 30 日以降はこのプロトコルを使用できなくなります。 この日付より前に、重要なセキュリティ更新プログラムと強化された機能が提供される、最新の Azure SDK ライブラリに移行してください。

古いライブラリは 2026 年 9 月 30 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。

既定では、WindowsAzure.ServiceBus パッケージは、Service Bus メッセージング プロトコル (SBMP) と呼ばれる専用 SOAP ベースのプロトコルを使用して Service Bus サービスと通信します。 バージョン 2.1 では、AMQP 1.0 のサポートが追加されました。既定のプロトコルではなく 使用することをお勧めします。

既定のプロトコルの代わりに AMQP 1.0 を使用するには、Service Bus 接続文字列を使用して、または TransportType オプション経由でクライアント コンストラクターにおいて明示的に構成する必要があります。 AMQP 1.0 を使用する場合、アプリケーション コードはこの変更以外は変更されません。

AMQP を使用する際にサポートされていない API 機能がいくつかあります。 これらのサポートされていない機能については、「動作の違い」をご覧ください。 そのほか、AMQP を使用すると意味が変わる詳細な構成設定もいくつかあります。

接続文字列を構成して AMQP 1.0 を使用する方法

;TransportType=Amqp で接続文字列を追加して、AMQP 1.0 を使用して Service Bus に接続するようにクライアントに指示します。 たとえば、次のように入力します。

Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp

namespaceSAS key は、Service Bus 名前空間を作成するときに、Azure portal から取得します。 詳細については、「Azure portal を使用して Service Bus 名前空間を作成する」を参照してください。

AMQP over WebSocket

AMQP over WebSockets を使用するには、接続文字列の TransportTypeAmqpWebSockets に設定します。 たとえば、 Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSocketsと指定します。

メッセージのシリアル化

既定のプロトコルを使用する場合、.NET クライアント ライブラリの既定のシリアル化の動作として、クライアント ライブラリと Service Bus サービスの間のトランスポートのために DataContractSerializer 型を使用して BrokeredMessage インスタンスをシリアル化します。 AMQP トランスポート モードを使用すると、クライアント ライブラリでは、ブローカー メッセージを AMQP メッセージにシリアル化するために、AMQP 型システムが使用されます。 このシリアル化によって、別のプラットフォームで実行されている可能性のある受信側アプリケーション (JMS API を使用して Service Bus にアクセスする Java アプリケーションなど) で、メッセージを受信して解釈できるようになります。

BrokeredMessage インスタンスを構築すると、メッセージの本文として機能する .NET オブジェクトをパラメーターとしてコンストラクターに提供できます。 AMQP プリミティブ型にマップできるオブジェクトの場合、本文は AMQP データ型にシリアル化されます。 オブジェクトを AMQP プリミティブ型 (つまり、アプリケーションによって定義されているカスタム型) に直接マップできない場合、オブジェクトは DataContractSerializer を使用してシリアル化され、シリアル化されたバイトが AMQP データ メッセージで送信されます。

.NET 以外のクライアントとの相互運用性を高めるには、メッセージ本文の AMQP 型に直接シリアル化できる .NET 型のみを使用してください。 次の表は、それらの型と、対応する AMQP 型システムへのマッピングを示します。

.NET 本文のオブジェクト型 対応する AMQP の型 AMQP 本文セクションの型
[bool] boolean AMQP 値
byte ubyte AMQP 値
ushort ushort AMQP 値
uint uint AMQP 値
ulong ulong AMQP 値
sbyte byte AMQP 値
short short AMQP 値
INT INT AMQP 値
long long AMQP 値
float float AMQP 値
double double AMQP 値
decimal decimal128 AMQP 値
char char AMQP 値
DateTime timestamp AMQP 値
Guid uuid AMQP 値
byte[] binary AMQP 値
string string AMQP 値
System.Collections.IList list AMQP 値: コレクションに含まれるアイテムとして指定できるのは、この表で定義されているアイテムのみです。
System.Array array AMQP 値: コレクションに含まれるアイテムとして指定できるのは、この表で定義されているアイテムのみです。
System.Collections.IDictionary map AMQP 値: コレクションに含まれるアイテムとして指定できるのは、この表で定義されている項目のみです。注: String キーのみがサポートされます。
Uri 記述子付き string (次の表を参照) AMQP 値
DateTimeOffset 記述子付き long (次の表を参照) AMQP 値
TimeSpan 記述子付き long (次の表を参照) AMQP 値
ストリーム binary AMQP データ (複数の場合あり)。 データ セクションには、Stream オブジェクトから読み取られた未加工のバイトが格納されます。
その他のオブジェクト binary AMQP データ (複数の場合あり)。 DataContractSerializer またはアプリケーションから提供されるシリアライザーを使用するオブジェクトのシリアル化されたバイナリが格納されます。
.NET 型 対応する AMQP の記述子付き型 Notes
Uri <type name=”uri” class=restricted source=”string”> <descriptor name=”com.microsoft:uri” /></type> Uri.AbsoluteUri
DateTimeOffset <type name=”datetime-offset” class=restricted source=”long”> <descriptor name=”com.microsoft:datetime-offset” /></type> DateTimeOffset.UtcTicks
TimeSpan <type name=”timespan” class=restricted source=”long”> <descriptor name=”com.microsoft:timespan” /></type> TimeSpan.Ticks

動作の違い

WindowsAzure.ServiceBus API の動作は、AMQP を使用する場合と既定のプロトコルを使用する場合では以下のようないくつかの細かい違いがあります。

  • OperationTimeout プロパティは無視されます。
  • MessageReceiver.Receive(TimeSpan.Zero)MessageReceiver.Receive(TimeSpan.FromSeconds(10)) として実装されます。
  • ロック トークンによるメッセージの完了は、最初にメッセージを受信したメッセージ レシーバーでのみ実行できます。

AMQP プロトコル設定を制御する

.NET API では、AMQP プロトコルの動作を制御するいくつかの設定が公開されています。

次のステップ

さらに詳しい情報については、 次のリンク先を参照してください。