Getting Started
Architecture
NServiceBus
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Callback Changes in NServiceBus Version 6

Component: Callbacks

This is part of the NServiceBus Upgrade Guide from Version 5 to 6, which also includes the following individual upgrade guides for specific components:

Feature Details
Transports
Persistence
Hosting
Other

The synchronous request-response feature, also known as callbacks, has been moved from the NServiceBus core package to its own NServiceBus.Callbacks NuGet package. This package must be used in order to use the callback functionality in NServiceBus version 6.

The API was also modified. The version 6 API is asynchronous by default and allows access to the response message. It is no longer possible to use callbacks inside handlers or sagas, because extension methods are available only on the message session. The differences in the API are covered in more detail in Callbacks.

The NServiceBus.Callbacks package has to be referenced only by the requesting endpoint. The responding endpoint needs NServiceBus.Callbacks only if it replies with int or enum types.

// For NServiceBus version 5.x
var requestMessage = new RequestMessage();
bus.Send(requestMessage)
    .Register(
        callback: asyncResult =>
        {
            var localResult = (CompletionResult) asyncResult.AsyncState;
            var response = (ResponseMessage) localResult.Messages[0];
        },
        state: null);

// For Callbacks version 1.x
var message = new RequestMessage();
var response = await endpoint.Request<ResponseMessage>(message);

In order to use callbacks, the endpoint must be uniquely addressable:

var instanceDiscriminator = ConfigurationManager.AppSettings["InstanceId"];
endpointConfiguration.MakeInstanceUniquelyAddressable(instanceDiscriminator);