Search code examples
c#.netnservicebusnsb-servicecontrol

Unable to register endpoint startup with ServiceControl


I'm doing a version 0.0.1 implementation of a host based Endpoint, which has worked just fine until I got errors complaining about:

non-Unicode headers something something ...

At transport database level.

Sadly that didn't get logged, so I don't have the exact message.

As I didn't have that before, I removed my localdb and recreated it blank. I ran the endpoint again and now I get these notifications:

Unable to register endpoint startup with ServiceControl

2017-08-24 10:03:48.743 | Warn | ServiceControl.Features.Heartbeats | Unable to register endpoint startup with ServiceControl. Going to reattempt registration after 00:01:00.
NServiceBus.Unicast.Queuing.QueueNotFoundException: Failed to send message to [ServiceBusTransport].[dbo].[Particular.ServiceControl.Dev] ---> System.Data.SqlClient.SqlException: Invalid object name 'ServiceBusTransport.dbo.Particular.ServiceControl.Dev'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption)
   at System.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader(Boolean isInternal, Boolean forDescribeParameterEncryption)
   at System.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, String endMethod, Boolean isInternal)
   at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
   at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)

Unable to send heartbeat to ServiceControl

2017-08-24 10:03:58.757 | Warn | ServiceControl.Features.Heartbeats | Unable to send heartbeat to ServiceControl.
NServiceBus.Unicast.Queuing.QueueNotFoundException: Failed to send message to [ServiceBusTransport].[dbo].[Particular.ServiceControl.Dev] ---> System.Data.SqlClient.SqlException: Invalid object name 'ServiceBusTransport.dbo.Particular.ServiceControl.Dev'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption)
   at System.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader(Boolean isInternal, Boolean forDescribeParameterEncryption)
   at System.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, String endMethod, Boolean isInternal)
   at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
   at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)

I've got no clue what I changed to cause this, any idea?

I do know that Particular.ServiceControl.Dev is the name of my ServiceControl Queue. It feels like the matching table wasn't created, but I'm not sure why.


Solution

  • Found it, we don't have ServiceControl set up at dev level. And since I removed the ServiceBusTransport database in it's entirity, the Particular.ServiceControl.Dev wasn't being created.

    After creating it manually using this query, it worked again:

    CREATE TABLE [dbo].[Particular.ServiceControl.Dev](
        [Id] [uniqueidentifier] NOT NULL,
        [CorrelationId] [varchar](255) NULL,
        [ReplyToAddress] [varchar](255) NULL,
        [Recoverable] [bit] NOT NULL,
        [Expires] [datetime] NULL,
        [Headers] [varchar](max) NOT NULL,
        [Body] [varbinary](max) NULL,
        [RowVersion] [bigint] IDENTITY(1,1) NOT NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]