Use la biblioteca WindowsAzure.ServiceBus de .NET Framework heredada con AMQP 1.0 | Microsoft Docs

Nota

Este artículo está destinado a usuarios del paquete WindowsAzure.ServiceBus que quieran empezar a utilizar AMQP de ese mismo paquete. Aunque se seguirán corrigiendo errores críticos en este paquete hasta el 30 de septiembre de 2026, se recomienda encarecidamente actualizar al nuevo paquete Azure.Messaging.ServiceBus, que está disponible a partir de noviembre de 2020 y que admite AMQP de forma predeterminada.

El 30 de septiembre de 2026, retiraremos las bibliotecas del SDK de Azure Service Bus WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus y com.microsoft.azure.servicebus, que no se ajustan a las directrices del SDK de Azure. También finalizaremos la compatibilidad con el protocolo SBMP, por lo que ya no podrá usar este protocolo después del 30 de septiembre de 2026. Migre a las bibliotecas más recientes del SDK de Azure, que ofrecen actualizaciones de seguridad críticas y funcionalidades mejoradas, antes de esa fecha.

Aunque las bibliotecas anteriores todavía se pueden usar después del 30 de septiembre de 2026, ya no recibirán soporte técnico oficial ni actualizaciones de Microsoft. Para obtener más información, consulte el anuncio de retirada de soporte técnico.

De forma predeterminada, el paquete WindowsAzure.ServiceBus se comunica con el servicio Service Bus a través de un protocolo basado en SOAP dedicado llamado Service Bus Messaging Protocol (SBMP). En la versión 2.1 se admite el protocolo AMQP 1.0, que recomendamos usar en lugar del protocolo predeterminado.

Para utilizar AMQP 1.0 en lugar del protocolo predeterminado, es necesario configurar de manera explícita la cadena de conexión de Service Bus o los constructores de cliente a través de la opción TransportType. Aparte de este cambio, el código de la aplicación permanece invariable al utilizar AMQP 1.0.

Hay unas cuantas funciones de la API que no son compatibles con el uso de AMQP. Estas funciones incompatibles se enumeran en la sección Diferencias de comportamiento. Algunos de los parámetros de configuración avanzados también adquieren un significado diferente cuando se usa AMQP.

Configuración de la cadena de conexión para el uso de AMPQ 1.0

Anexe la cadena de conexión con ;TransportType=Amqp para indicar al cliente que realice su conexión a Service Bus mediante AMQP 1.0. Por ejemplo,

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

Donde namespace y SAS key se obtienen de Azure Portal al crear un espacio de nombres de Service Bus. Para más información, vea Creación de un espacio de nombres de Service Bus mediante Azure Portal.

AMQP sobre WebSockets

Para usar AMQP mediante WebSockets, establezca la propiedad TransportType de la cadena de conexión en AmqpWebSockets. Por ejemplo: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets.

Serialización de mensajes

Cuando se usa el protocolo predeterminado, el comportamiento de serialización predeterminado de la biblioteca de cliente de .NET consiste en usar el tipo DataContractSerializer para serializar una instancia de BrokeredMessage para el transporte entre la biblioteca de cliente y el servicio de Service Bus. Cuando se usa el modo de transporte de AMQP, la biblioteca de cliente emplea el sistema de tipos de AMQP para la serialización del mensaje asincrónico en un mensaje de AMQP. Esta serialización permite que el mensaje se reciba e interprete por una aplicación receptora que se ejecuta potencialmente en una plataforma diferente, por ejemplo, una aplicación Java que usa la API de JMS para tener acceso a Service Bus.

Cuando se construye una instancia BrokeredMessage, puede proporcionar un objeto .NET como un parámetro al constructor para que actúe como el cuerpo del mensaje. Para los objetos que se pueden asignar a tipos primitivos de AMQP, el cuerpo se serializa en tipos de datos de AMQP. Si el objeto no se puede asignar directamente a un tipo primitivo de AMQP, es decir, un tipo personalizado definido por la aplicación, el objeto se serializa con DataContractSerializer y los bytes serializados se envían en un mensaje de datos de AMQP.

Para facilitar la interoperabilidad con clientes que no sean de .NET, use solo los tipos de .NET que se puedan serializar directamente en tipos AMQP para el cuerpo del mensaje. En la siguiente tabla se detallan estos tipos y la asignación correspondiente al sistema de tipos de AMQP.

Tipo de objeto de cuerpo de .NET Tipo de AMQP asignado Tipo de sección de cuerpo de AMQP
bool boolean Valor de AMQP
byte ubyte Valor de AMQP
ushort ushort Valor de AMQP
uint uint Valor de AMQP
ulong ulong Valor de AMQP
sbyte byte Valor de AMQP
short short Valor de AMQP
int int Valor de AMQP
long long Valor de AMQP
FLOAT FLOAT Valor de AMQP
double double Valor de AMQP
Decimal decimal128 Valor de AMQP
char char Valor de AMQP
DateTime timestamp Valor de AMQP
Guid uuid Valor de AMQP
byte[] binary Valor de AMQP
string string Valor de AMQP
System.Collections.IList list Valor de AMQP: los elementos contenidos en la colección solo pueden ser los definidos en esta tabla.
System.Array array Valor de AMQP: los elementos contenidos en la colección solo pueden ser los definidos en esta tabla.
System.Collections.IDictionary map Valor de AMQP: los elementos contenidos en la colección solo pueden ser los definidos en esta tabla. Nota: solo se admiten claves de cadena.
Identificador URI Cadena descrita (consulte la tabla siguiente) Valor de AMQP
DateTimeOffset Longitud descrita (consulte la tabla siguiente) Valor de AMQP
TimeSpan Longitud descrita (consulte a continuación) Valor de AMQP
STREAM binary Datos de AMQP (pueden ser varios) Las secciones de datos contienen los bytes sin formato que se leen desde el objeto de secuencia.
Otro objeto binary Datos de AMQP (pueden ser varios) Contiene el binario serializado del objeto que usa DataContractSerializer o un serializador proporcionado por la aplicación.
Tipo .NET Mapped AMQP Described Type Notas
Identificador 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

Diferencias de comportamiento

Hay algunas pequeñas diferencias en el comportamiento de la API de WindowsAzure.Service Bus al usar AMQP, en comparación con el protocolo predeterminado:

  • La propiedad OperationTimeout se omite.
  • MessageReceiver.Receive(TimeSpan.Zero) se implementa como MessageReceiver.Receive(TimeSpan.FromSeconds(10)).
  • La finalización de mensajes mediante tokens de bloqueo solo puede realizarse por los receptores del mensaje que reciben inicialmente los mensajes.

Control de la configuración del protocolo AMQP

Las API de .NET exponen varias opciones para controlar el comportamiento del protocolo AMQP:

Pasos siguientes

¿Listo para obtener más información? Consulte los siguientes vínculos: