NServiceBus Host Upgrade Version 6 to 7

Component: NServiceBus Host

IConfigureThisEndpoint changes

IConfigureThisEndpoint.Customize is passed an instance of EndpointConfiguration instead of BusConfiguration.

7.x NServiceBus.Host
class CustomizingHostUpgrade :
    IConfigureThisEndpoint
{
    public void Customize(EndpointConfiguration endpointConfiguration)
    {
        // perform some custom configuration
        endpointConfiguration.UsePersistence<InMemoryPersistence>();
    }
}
6.x NServiceBus.Host
class CustomizingHostUpgrade :
    IConfigureThisEndpoint
{
    public void Customize(BusConfiguration busConfiguration)
    {
        // perform some custom configuration
        busConfiguration.UsePersistence<InMemoryPersistence>();
    }
}

IWantToRunWhenEndpointStartsAndStops

An interface called IWantToRunWhenEndpointStartsAndStops has been added. This interface replaces the IWantToRunWhenBusStartsAndStops in the NServiceBus core.

The Start and Stop methods will block start up and shut down of the endpoint.

Interface in Version 5 of NServiceBus

5.x NServiceBus
public class Bootstrapper :
    IWantToRunWhenBusStartsAndStops
{
    public void Start()
    {
        // Do startup actions here.
    }

    public void Stop()
    {
        // Do cleanup actions here.
    }
}

Interface in Version 7 of NServiceBus.Host

7.x NServiceBus.Host
// Use this in NServiceBus.Host or NServiceBus.Host.AzureCloudService
namespace Host_7.UpgradeGuides.Core5to6
{
    public class Bootstrapper :
        IWantToRunWhenEndpointStartsAndStops
    {
        public Task Start(IMessageSession session)
        {
            // Do startup actions here.
            // Either mark Start method as async or do the following
            return Task.CompletedTask;
        }

        public Task Stop(IMessageSession session)
        {
            // Do cleanup actions here.
            // Either mark Stop method as async or do the following
            return Task.CompletedTask;
        }
    }
}

The IMessageSession parameter provides all the necessary methods to send messages as part of the endpoint start up.

Visual Studio PowerShell helpers removed

In NServiceBus Version 3 and higher, there was a NuGet package that provided helpers to generate XML configuration sections using the PowerShell console in Visual Studio.

For example, running the Add-NServiceBusAuditConfig ProjectName command would add the following section to the app.config file:

<configuration>
  <configSections>
    <section name="AuditConfig"
             type="NServiceBus.Config.AuditConfig, NServiceBus.Core" />
  </configSections>
  <AuditConfig QueueName="audit" />
</configuration>

In Versions 6 and above, these helpers have been removed. The configuration helpers encouraged creating a more complex XML configuration than was necessary, making it difficult to manage in the long run.

The recommended configuration approach is "code-first", which is more flexible and less error-prone than using the PowerShell helpers. The configuration can be read from any location at runtime, including the app.config. For more information about the API, refer to the configuration documentation dedicated to the particular functionality. For example, see how recoverability and Audit queues can be configured using code API.

If an EndpointConfig.cs file already exists in the project, be careful to not overwrite it when upgrading the NServiceBus.Host package. If Visual Studio detects a conflict, it will ask whether the file should be overwritten. To keep the old configuration, choose No.

WCF Integration

The WCF integration using WcfService has been moved from the host to the separate NuGet package NServiceBus.Wcf. That package must be used in order to use the WCF integration functionality when targeting NServiceBus versions 6 and above. The NServiceBus.Wcf NuGet package has no dependency on the NServiceBus.Host NuGet package and can also be used in self-hosting scenarios.

The WCF integration has been augmented with additional functionality such as the ability to reply with messages to the client, cancel requests and reroute to other endpoints. More information can be found in Wcf.

Ambiguous type compilation error

By default referenced assemblies are imported into the global namespace. This might lead to ambiguous type reference problems when implementing WcfService<TRequest, TResponse> or IWcfService<TRequest, TResponse>. To resolve the ambiguous type reference do the following:

  • In the Solution Explorer right click under References on the NServiceBus.Wcf reference and switch to the properties pane, or use Alt+Enter
  • Under the alias property set an alias for the assembly, for example wcf
  • In the declaration of the WCF services use:
extern alias wcf;
using wcf::NServiceBus;

Related Articles


Last modified