NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #100 most downloaded on NuGet
Azure Service Bus is a fully managed enterprise integration message broker. Service Bus can decouple applications and services. Service Bus offers a reliable and secure platform for asynchronous transfer of data and state. This client library allows for both sending and receiving messages using Azure Service Bus. For more information about Service Bus, see https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-overview
Last release 14 days ago
24 Sep 2026
Release timing varies
gaps range from 2 weeks to 13 months
Nearly every release is documented
notes for 42 of 42 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
42 releases · first in 2020
Added SqlFilterCount and CorrelationFilterCount properties to TopicRuntimeProperties , exposing the total number of SQL filters and correlation filter
SqlFilterCount and CorrelationFilterCount properties to TopicRuntimeProperties, exposing the total number of SQL filters and correlation filters across all of a topic's subscriptions. These are populated by GetTopicRuntimePropertiesAsync and GetTopicsRuntimePropertiesAsync.ServiceBusAdministrationClientOptions.ServiceVersion.V2024_05 and made it the default service version. The topic filter counts above are served by the 2024-05 service API version, so the administration client now sends api-version=2024-05 by default.GetMessageSessionsAsync overloads on ServiceBusClient for queues and subscriptions. The no-filter overload returns the IDs of sessions that have active messages or session state, and the sessionStateUpdatedAfter overload returns session IDs whose session state was updated after the specified timestamp. Implements the com.microsoft:get-message-sessions AMQP management operation. (#58761)ServiceBusSessionReceiver, allowing a session to be cooperatively taken over by another receiver. Set ServiceBusSessionReceiverOptions.EnableNonExclusiveSession to accept a session non-exclusively, then read the token from ServiceBusSessionReceiver.SessionLockToken and pass it as ServiceBusSessionReceiverOptions.SessionLockToken = Guid.Parse(token) to take that session over. ServiceBusSessionReceiver.IsSessionExclusive reports the mode the session was established under. Dispositions for a non-exclusive session are routed over the management link so that settlement keeps working across a takeover, which lowers settlement throughput compared to an exclusive session. This applies to ServiceBusSessionReceiver only; ServiceBusSessionProcessor continues to lock sessions exclusively. Accepting a session with EnableNonExclusiveSession set throws NotSupportedException when the endpoint declines it, either by refusing the request outright or by accepting it without assigning a lock token, which is how a caller detects whether the feature is available for a namespace. An endpoint that declines in some other way surfaces the exception its own error maps to. (#60060)Fixed retry classification for web socket failures with nested causes. On modern .NET, a transient network failure during a web socket connection attempt surfaces as a WebSocketException that wraps an HttpRequestException, which wraps the meaningful IOException or SocketException. The retry policy previously inspected only one level of nesting and treated these failures as terminal. The policy now unwraps nested wrapper exceptions to a bounded depth, so transient failures such as a connection reset use the configured retries. Terminal socket failures, such as host-not-found and host-unreachable, are not retried at any supported depth. A host-unreachable failure on an established connection is now terminal. Earlier versions retried it. (#61868)
Fixed a bug where canceling ServiceBusReceiver.CloseAsync left the receiver unable to close its own links. The receiver was marked as closed, and its set of locked messages disposed, before the cancellation was observed, so every later call to CloseAsync returned immediately without doing any work and the links stayed open until the owning ServiceBusClient was disposed. The receiver is now left open and closable when a close does not complete, so the operation can be retried. (#59309)
ServiceBusAdministrationClient service version is now 2024-05 (previously 2021-05). Existing operations are unaffected in behavior; the change is required to surface the new topic filter count properties.One column per quarter.
Code | Docs Support: Active Storage - Blobs Azure.Storage.Blobs
Code | Docs
Support: Active
Storage - Blobs
Azure.Storage.Blobs
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Fixed a bug where ServiceBusAdministrationClient operations (such as GetQueueAsync, GetTopicAsync, QueueExistsAsync, and TopicExistsAsync) threw a ServiceBusException wrapping an ArgumentException ("Value cannot be empty or contain only white-space characters") when an entity had a shared access authorization rule whose key values were masked (returned empty) by the service for callers lacking the listkeys/action permission. The deserialization path now accepts empty key values, and creating CreateQueueOptions/CreateTopicOptions from the returned properties no longer throws, matching the behavior of the other Azure Service Bus SDKs. (#60469)
Fixed a bug in the ServiceBusProcessor where terminal errors (such as DNS resolution failures) caused a tight retry loop with no delay between attempts, potentially overwhelming logs and consuming excessive resources. (#54572)
Fixed a race condition in AmqpSender where concurrent calls to CreateMessageBatchAsync during initial AMQP link creation could observe an inconsistent MaxBatchSize, causing a spurious ArgumentOutOfRangeException. (#56301)
The sender now reads the com.microsoft:max-message-batch-size vendor property from the AMQP link to correctly limit batch size on Premium large-message entities, where max-message-size can be up to 100 MB but the batch limit is 1 MB. The 4,500 message count cap on batches has been removed as the service does not enforce a count limit. (#44914)
Fixed a bug where the custom port associated with a local emulator endpoint was reset by the ServiceBusAdministrationClient.
ServiceBusAdministrationClient.Updated retry policy behavior when the service is throttling and the TryTimeout is shorter than the standard throttling time of 30 seconds. Previously, the operation was immediately canceled with a server busy exception. With these changes, the operation will begin consuming retry attempts while throttling until either the server busy state is cleared or all configured retry attempts are exhausted. (#50121)
Updated the Microsoft.Azure.Amqp dependency to 2.7.0, which contains several bug fixes and adds support for AOT. (see: commits)
ServiceBusClientOptions now supports registering a callback delegate for participating in the validation of SSL certificates when connections are esta
ServiceBusClientOptions now supports registering a callback delegate for participating in the validation of SSL certificates when connections are established. This delegate may override the built-in validation and allow or deny certificates based on application-specific logic.Added jitter to the lock renewal timer to reduce the likelihood of lock renewal collisions when using the ServiceBusProcessor or the ServiceBusSessionProcessor.
Enhanced retry logic to consider additional cases for web socket-based failures. In many cases, a WebSocketException is triggered which wraps a SocketException with the details for the specific network conditions. Retry decisions are now based on the internal exception, if present, to ensure retries are correctly applied.
Updated the Microsoft.Azure.Amqp dependency to 2.6.11, which contains several bug fixes. (see: commits)
Fixed an issue with the AmqpReceiver class where a drain failure during a ReceiveMessagesAsync operation would cause message ordering to be violated.
Fixed an issue with the AmqpReceiver class where a drain failure during a ReceiveMessagesAsync operation would cause message ordering to be violated. (#47822)
Fixed an issue where an error response from the Service Bus administration service without a body was incorrectly parsed, resulting in a null argument exception obscuring the actual failure response. (#47517)
Though Service Bus does not perform JSON serialization and was not vulnerable, the .NET 9 SDK was emitting warnings during scans due to a flaw in the…
Added annotations to make the package compatible with trimming and native AOT compilation.
Updated the Microsoft.Azure.Amqp dependency to 2.6.9, which contains several bug fixes. (see: commits)
Updated the transitive dependency on System.Text.Json to 6.0.10 via Azure.Core 1.44.1. Though Service Bus does not perform JSON serialization and was not vulnerable, the .NET 9 SDK was emitting warnings during scans due to a flaw in the previous System.Text.Json dependency.
Enhanced the logs emitted when acquiring a session with ServiceBusClient times out or is canceled. As these are known and expected exception condition
ServiceBusClient times out or is canceled. As these are known and expected exception conditions, they are now correctly logged as verbose information rather than an error. Previously, these scenarios were special-cased for processors, but receivers were treated as standard errors. Going forward, the processor and client/receiver scenarios are handled consistently.Bump Azure.Core.Amqp dependency to 1.3.1, which includes a fix to serialization of binary application properties.
Azure.Core.Amqp dependency to 1.3.1, which includes a fix to serialization of binary application properties.Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Fixed an issue that caused connection strings using host names without a scheme to fail parsing and be considered invalid.
Fixed an issue where the scheduled enqueue time was not cleared when creating a new message from a received message.
Fixed an issue that prevented relative URIs from being used with application properties in the ServiceBusMessage.ApplicationProperties and ServiceBusReceivedMessage.ApplicationProperties collections.
Fixed an issue that caused ServiceBusMessageBatch to accept more than the allowed 1mb batch limit when sending to Service Bus entities with large message sizes enabled.
Fixed issue where the SupportOrdering property was not being respected when set on CreateTopicOptions.
The client will now refresh the maximum message size each time a new AMQP link is opened; this is necessary for large message support, where the maximum message size for entities can be reconfigureed adjusted on the fly. Because the client had cached the value, it would not be aware of the change and would enforce the wrong size for batch creation.
Updated the Microsoft.Azure.Amqp dependency to 2.6.7, which contains a fix for decoding messages with a null format code as the body.
Improved efficiency of subclient creation, reducing allocations when no explicit options are passed.
Reduced the number of allocations of various option types. (A community contribution, courtesy of martincostello)
Fixed an edge case where a cancellation token signaled while waiting for a throttling delay would cause a failure to reset state and service operation
Fixed an edge case where a cancellation token signaled while waiting for a throttling delay would cause a failure to reset state and service operations would continue to apply the throttle delay going forward. (#42952)
Fixed an issue where the ServiceBusSessionProcessor was not respecting ServiceBusSessionProcessorOptions.MaxConcurrentCallsPerSession when ServiceBusSessionProcessorOptions.SessionIds was set to a value. (#43157)
ServiceBusModelFactory members with a focus on clarifying what model properties each parameter to the factory methods will populate. In some cases, parameter names differ from the associated model properties, causing confusion. (#42772)When creating a new ServiceBusMessage from an existing ServiceBusReceivedMessage, diagnostic properties will now be properly reset. Previously, they w
ServiceBusMessage from an existing ServiceBusReceivedMessage, diagnostic properties will now be properly reset. Previously, they were incorrectly retained which led to the new message being indistinguishable from the old in traces.Microsoft.Azure.Amqp dependency to 2.6.5, which includes several bug fixes. One notable fix addresses an obscure race condition when a cancellation token is signaled while service operations are being invoked concurrently which caused those operations to hang. Another notable fix is for an obscure race condition that occurred when attempting to complete a message which caused the operation to hang.Fixed draining of credits when prefetch is enabled.
ServiceBusSessionProcessor as it is not necessary unless the ServiceBusSessionProcessorOptions.SessionIds property is set.ServiceBusClient constructor. A URI is now also accepted as a valid format. This is intended to improve the experience when using the management library, CLI, Bicep, or ARM template to create the namespace, as they return only an endpoint for the namespace. Previously, callers were responsible for parsing the endpoint and extracting the host name for use with the client.Fixed the logic used to set the TimeToLive value of the AmqpMessageHeader for received messages to be based on the difference of the AbsoluteExpiryTim
NullReferenceException from being thrown when the ReceiveMessagesAsync method is called using a high degree of concurrency.Adjusted retries to consider an unreachable host address as terminal. Previously, all socket-based errors were considered transient and would be retri
ServiceBusMessage constructor that takes a ServiceBusReceivedMessage to no longer copy over the
x-opt-partition-id key as this is meant to apply only to the original message.Microsoft.Azure.Amqp dependency to 2.6.4, which enables support for TLS 1.3.The following breaking changes were made for the experimental support of Open Telemetry:
The following breaking changes were made for the experimental support of Open Telemetry:
ActivitySource name used to report message activity from Azure.Messaging.ServiceBus to Azure.Messaging.ServiceBus.Message.Fixed issue where ActivitySource activities were not being created even when the experimental flag was set.
ActivitySource activities were not being created even when the experimental
flag was set.Microsoft.Azure.Amqp, has been bumped to 2.6.3. This fixes an issue with timeout duration calculations during link creation and includes several efficiency improvements.Fixed race condition that could lead to an ObjectDisposedException when using the ServiceBusSessionProcessor.
ObjectDisposedException when using the ServiceBusSessionProcessor.Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
ProcessMessageEventArgs provides a MessageLockLostAsync event that can be subscribed to in
order to be notified when the message lock is lost.ProcessSessionMessageEventArgs provides a SessionLockLostAsync event that can be subscribed to in
order to be notified when the session lock is lost.ServiceBusMessage taking an AmqpAnnotatedMessage has been added.CancellationTokenSource used by the ServiceBusSessionProcessor in order to renew session
locks is now disposed when the session is no longer being processed, thereby preventing a memory leak.Do not copy over DeliveryAnnotations when constructing a new ServiceBusMessage from a ServiceBusReceivedMessage.
DeliveryAnnotations when constructing a new ServiceBusMessage from a ServiceBusReceivedMessage.The client-side idle timeout for connections can now be configured using ServiceBusClientOptions.
ServiceBusClientOptions.Removed the 30 second cap applied when opening AMQP links; this allows developers to fully control the timeout for service operations by tuning the TryTimeout as appropriate for the application.
Fixed potential NullReferenceException when using the ServiceBusProcessor or ServiceBusSessionProcessor.
Fixed issue with Guid writing during message settlement that could result in an ArgumentException if the ArrayPool returned a buffer that is larger th
ArgumentException if the ArrayPool returned a buffer that is larger than the size of the Guid.Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
ActivitySource activities that are used when using the experimental OpenTelemetry support will include the az.schema_url tag indicating the OpenTelemetry schema version. They will also include the messaging attribute specified here.Some checks for cancellation that were occurring after a service operation had been completed have been removed. Because the service operation was already complete, cancellation was not actually performed and the results of the operation should be returned.
Exceptions related to the cancellation token being signaled on a receive operation will now be logged as Verbose rather than Error.
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
UpdatePrefetchCount methods to ServiceBusProcessor and ServiceBusSessionProcessor to allow updating the prefetch count of a running processor. (A community contribution, courtesy of danielmarbach)DrainAsync method.MaxConcurrentCallsPerSession setting which resulted in the setting not always being respected.Telemetry will now use a parent activity instead of links when using the ServiceBusProcessor or ServiceBusSessionProcessor.
ServiceBusProcessor or ServiceBusSessionProcessor.Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
AcceptNextSessionAsync call timed out and EnableCrossEntityTransaction is set to true.ServiceBusProcessor to avoid memory leak. (A community contribution, courtesy of danielmarbach)Body property of a received message. (A community contribution, courtesy of danielmarbach)ServiceBusRetryPolicy to improve performance and prevent deadlocks. (A community contribution, courtesy of danielmarbach)Added the ability to set the a custom Identifier on the various client options types.
ServiceBusProcessor or ServiceBusSessionProcessor.ServiceBusClientOptions.CustomEndpointAddress property.ReleaseSession and RenewSessionLockAsync methods to the ProcessSessionEventArgs class to allow the user to manage the session in the SessionInitializingAsync and the SessionClosingAsync event handlers.EnableCrossEntityTransactions is set to true in the ServiceBusClientOptions.Stable release of ServiceBusRuleManager.
ServiceBusRuleManager.EntityPath and FullyQualifiedNamespace are now included on the various processor event args.Fixed issue that could result in the message lock renewal not being cancelled if the user message handler threw an exception.
ProcessorReceiveActions in the event of the user message handler throwing an exception.Added the GetReceiveActions method to ProcessMessageEventArgs and ProcessSessionMessageEventArgs to allow for receiving additional messages from the p
GetReceiveActions method to ProcessMessageEventArgs and ProcessSessionMessageEventArgs to allow for receiving additional messages from the processor callback.ServiceBusTransportMetrics and ServiceBusRuleManager have been removed from the prior beta versions. These will be evaluated for inclusion in a future GA release.CancellationToken that is exposed via the event args.EnableCrossEntityTransactions is set to true, since with this configuration, all links will share the same session.ServiceBusSessionProcessor are now logged as Verbose rather than Warning.Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
The State property has been added to ServiceBusReceivedMessage which indicates whether a message is Active, Scheduled, or Deferred. (A community contribution, courtesy of danielmarbach)
Extension methods have been added for registering the ServiceBusAdministrationClient via dependency injection for use in ASP.NET Core applications. (A community contribution, courtesy of kaylumah)
Support for cancellation tokens has been improved for AMQP operations, enabling earlier detection of cancellation requests without needing to wait for the configured timeout to elapse.
Add a delay when retrying if we are being throttled by the service.
Default To, ReplyTo, and CorrelationId properties of ServiceBusMessage to null, rather than empty string. To retain the old behavior, you can set the
To, ReplyTo, and CorrelationId properties of ServiceBusMessage to null, rather than empty string.
To retain the old behavior, you can set the properties to empty string when constructing your message:var message = new ServiceBusMessage
{
ReplyTo = "",
To = "",
CorrelationId = ""
};
Added support for cancelling send and receives while in-flight.
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Fixed an issue with refreshing authorization where redundant requests were made to acquire AAD tokens that were due to expire. Refreshes will now coordinate to ensure a single AAD token acquisition.
Fixed an issue with authorization refresh where attempts may have been made to authorize a faulted link. Links that fail to open are no longer be considered valid for authorization.
Fixed bug in the ServiceBusProcessor where message locks stopped being automatically renewed after StopProcessingAsync was called.
ServiceBusProcessor where message locks stopped being automatically renewed after StopProcessingAsync was called.Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
The retry policy used by clients will no longer overflow the TimeSpan maximum when using an Exponential strategy with a large number of retries and long delay set.
The name of the property displayed in the ArgumentOutOfRangeException in the MaxDeliveryCount property in SubscriptionProperties was updated to use the correct property name. (A community contribution, courtesy of oscarcabrero)
Updated dependency on Microsoft.Azure.Amqp to benefit from a performance enhancement involving message settlement.
Fixed issue where batch size calculation was not taking diagnostic tracing information into account.
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
Thank you to our developer community members who helped to make the Service Bus client library better with their contributions to this release:
ServiceBusModelFactory.ServiceBusMessageBatch to allow mocking a ServiceBusMessageBatch.ServiceBusProcessor where closing and disposing or disposing multiple times resulted in an exception. (A community contribution, courtesy of aarondandy)ServiceBusMessageBatch.Fixed race condition that could occur when using the same ServiceBusSessionReceiverOptions instance for several receivers.
ServiceBusSessionReceiverOptions instance
for several receivers.Renamed GetRawMessage method to GetRawAmqpMessage.
Your coding agent can read these notes before it upgrades. Set up the MCP server →