Använda äldre WindowsAzure.ServiceBus .NET-ramverksbibliotek med AMQP 1.0

Kommentar

Den här artikeln är avsedd för befintliga användare av WindowsAzure.ServiceBus-paketet som vill växla till att använda AMQP i samma paket. Även om det här paketet fortsätter att ta emot kritiska felkorrigeringar fram till den 30 september 2026 rekommenderar vi starkt att du uppgraderar till det nya Azure.Messaging.ServiceBus-paketet i stället som är tillgängligt från och med november 2020 och som stöder AMQP som standard.

Den 30 september 2026 drar vi tillbaka Azure Service Bus SDK-biblioteken WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus och com.microsoft.azure.servicebus, som inte följer Riktlinjerna för Azure SDK. Vi kommer också att avsluta stödet för SBMP-protokollet, så du kommer inte längre att kunna använda det här protokollet efter den 30 september 2026. Migrera till de senaste Azure SDK-biblioteken, som erbjuder kritiska säkerhetsuppdateringar och förbättrade funktioner, före det datumet.

Även om de äldre biblioteken fortfarande kan användas efter den 30 september 2026 får de inte längre officiell support och uppdateringar från Microsoft. Mer information finns i meddelandet om supportavgång.

Som standard kommunicerar WindowsAzure.ServiceBus-paketet med Service Bus-tjänsten med hjälp av ett dedikerat SOAP-baserat protokoll som kallas Service Bus Messaging Protocol (SBMP). I version 2.1 har stöd för AMQP 1.0 lagts till, vilket vi rekommenderar att du använder i stället för standardprotokollet.

Om du vill använda AMQP 1.0 i stället för standardprotokollet krävs explicit konfiguration på Service Bus-anslutningssträng eller i klientkonstruktorerna via alternativet TransportType. Förutom den här ändringen förblir programkoden oförändrad när du använder AMQP 1.0.

Det finns några API-funktioner som inte stöds när du använder AMQP. Dessa funktioner som inte stöds visas i avsnittet Beteendeskillnader. Vissa av de avancerade konfigurationsinställningarna har också en annan betydelse när du använder AMQP.

Konfigurera anslutningssträng att använda AMQP 1.0

Lägg till din anslutningssträng med ;TransportType=Amqp för att instruera klienten att ansluta till Service Bus med AMQP 1.0. De prestandaobjekt

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

Var namespace och SAS key hämtas från Azure-portalen när du skapar ett Service Bus-namnområde. Mer information finns i Skapa ett Service Bus-namnområde med hjälp av Azure-portalen.

AMQP över WebSockets

Om du vill använda AMQP över WebSockets anger du TransportType i anslutningssträng till AmqpWebSockets. Exempel: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets.

Meddelandeserialisering

När du använder standardprotokollet är standard serialiseringsbeteendet för .NET-klientbiblioteket att använda typen DataContractSerializer för att serialisera en BrokeredMessage-instans för transport mellan klientbiblioteket och Service Bus-tjänsten. När du använder AMQP-transportläget använder klientbiblioteket AMQP-typsystemet för serialisering av det asynkrona meddelandet till ett AMQP-meddelande. Med den här serialiseringen kan meddelandet tas emot och tolkas av ett mottagande program som eventuellt körs på en annan plattform, till exempel ett Java-program som använder JMS-API:et för att få åtkomst till Service Bus.

När du skapar en BrokeredMessage-instans kan du ange ett .NET-objekt som en parameter till konstruktorn för att fungera som brödtext i meddelandet. För objekt som kan mappas till primitiva AMQP-typer serialiseras brödtexten till AMQP-datatyper. Om objektet inte kan mappas direkt till en primitiv AMQP-typ; en anpassad typ som definierats av programmet, sedan serialiseras objektet med hjälp av DataContractSerializer och serialiserade byte skickas i ett AMQP-datameddelande.

För att underlätta samverkan med non-.NET klienter använder du endast .NET-typer som kan serialiseras direkt till AMQP-typer för meddelandets brödtext. I följande tabell beskrivs dessa typer och motsvarande mappning till AMQP-typsystemet.

Objekttyp för .NET-brödtext Mappad AMQP-typ AMQP-brödtextavsnittstyp
bool boolean AMQP-värde
byte ubyte AMQP-värde
ushort ushort AMQP-värde
uint uint AMQP-värde
ulong ulong AMQP-värde
sbyte byte AMQP-värde
short short AMQP-värde
heltal heltal AMQP-värde
lång lång AMQP-värde
flyttal flyttal AMQP-värde
dubbel dubbel AMQP-värde
decimal decimal 128 AMQP-värde
char char AMQP-värde
Datum/tid timestamp AMQP-värde
GUID uuid AMQP-värde
byte[] binary AMQP-värde
sträng sträng AMQP-värde
System.Collections.IList lista AMQP-värde: objekt som finns i samlingen kan bara vara de som definieras i den här tabellen.
System.Array matris AMQP-värde: objekt som finns i samlingen kan bara vara de som definieras i den här tabellen.
System.Collections.IDictionary map AMQP-värde: objekt som finns i samlingen kan bara vara de som definieras i den här tabellen. Obs! Endast strängnycklar stöds.
Uri Beskriven sträng (se följande tabell) AMQP-värde
DateTimeOffset Lång beskrivning (se följande tabell) AMQP-värde
TimeSpan Beskrivs länge (se följande) AMQP-värde
Stream binary AMQP-data (kan vara flera). Avsnitten Data innehåller rådata som lästs från Stream-objektet.
Annat objekt binary AMQP-data (kan vara flera). Innehåller den serialiserade binärfilen för objektet som använder DataContractSerializer eller en serialiserare som tillhandahålls av programmet.
.NET-typ Mappad AMQP-beskrivningstyp OBS!
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

Beteendeskillnader

Det finns några små skillnader i beteendet för WindowsAzure.ServiceBus-API:et när du använder AMQP, jämfört med standardprotokollet:

  • Egenskapen OperationTimeout ignoreras.
  • MessageReceiver.Receive(TimeSpan.Zero) implementeras som MessageReceiver.Receive(TimeSpan.FromSeconds(10)).
  • Slutförande av meddelanden med låstoken kan bara göras av de meddelandemottagare som ursprungligen tog emot meddelandena.

Kontrollera AMQP-protokollinställningar

.NET-API:erna exponerar flera inställningar för att styra beteendet för AMQP-protokollet:

Nästa steg

Vill du lära dig mer? Besök följande länkar: