带有Azure存储的NServiceBus 4在TimeoutPersister中获取NullReferenceException

带有Azure存储的NServiceBus 4在TimeoutPersister中获取NullReferenceException,azure,nservicebus,Azure,Nservicebus,我正在尝试将NServiceBus(版本4.6.0.0)与托管在Windows Azure网站和Azure存储中的ASP.NET MVC应用程序一起使用,以实现持久性,但TimeoutManager存在问题 在尝试使用Azure之前,我让我的应用程序使用默认的MSMQ和RavenDB设置与NServiceBus一起工作,然后改为使用Azure存储。但是,通过该设置,我在NServiceBus.Azure.TimoutManagerPersister.TryGetLastSuccessfulRea

我正在尝试将NServiceBus(版本4.6.0.0)与托管在Windows Azure网站和Azure存储中的ASP.NET MVC应用程序一起使用,以实现持久性,但TimeoutManager存在问题

在尝试使用Azure之前,我让我的应用程序使用默认的MSMQ和RavenDB设置与NServiceBus一起工作,然后改为使用Azure存储。但是,通过该设置,我在
NServiceBus.Azure.TimoutManagerPersister.TryGetLastSuccessfulRead()
中启动后立即收到多个NullReferenceException错误

我曾尝试使用存储模拟器运行此本地应用程序,并将所有内容部署到Azure,但在这两个应用程序上都出现了相同的错误

以下是我如何在我的应用程序中设置NServiceBus:

Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
    public static IBus Bus { get; private set; }

    protected void Application_Start()
    {
        ...

        Configure.ScaleOut(s => s.UseSingleBrokerQueue());
        Feature.Enable<Sagas>();

        IStartableBus startableBus = Configure.With()
            .DefaultBuilder()
            .DefineEndpointName("MyApp.Web")
            .AzureConfigurationSource()
            .UseTransport<AzureStorageQueue>()
            .AzureMessageQueue()
            .AzureSubscriptionStorage()
            .UseAzureTimeoutPersister()
            .AzureSagaPersister()
            .PurgeOnStartup(false)
            .UnicastBus()
            .LoadMessageHandlers()
            .RunHandlersUnderIncomingPrincipal(false)
            .Log4Net(new DebugAppender { Threshold = Level.Warn })
            .RijndaelEncryptionService()
            .CreateBus();

        Configure.Instance.ForInstallationOn<Windows>().Install();
        Bus = startableBus.Start();
    }
}

即使错误消息被添加到Azure队列并正在处理中,但只有几分钟时间TimeoutManager停止处理并且消息没有退出队列。

听起来您正在使用的存储sdk中有问题,您使用的是哪个版本?

谢谢Yves!这是一个版本问题。我有最新的Azure SDK版本2.3,但该项目没有最新版本的Windows Azure Storage NuGet软件包。我把它更新到4.0.0版,一切都开始工作了。
<configSections>
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
    <section name="AuditConfig" type="NServiceBus.Config.AuditConfig, NServiceBus.Core" />
    <section name="AzureProfileConfig" type="NServiceBus.Config.AzureProfileConfig, NServiceBus.Hosting.Azure" />
    <section name="AzureSubscriptionStorageConfig" type="NServiceBus.Config.AzureSubscriptionStorageConfig, NServiceBus.Azure" />
    <section name="AzureSagaPersisterConfig" type="NServiceBus.Config.AzureSagaPersisterConfig, NserviceBus.Azure" />
    <section name="AzureTimeoutPersisterConfig" type="NServiceBus.Config.AzureTimeoutPersisterConfig, NserviceBus.Azure" />
  </configSections>

  <connectionStrings>
    <add name="NServiceBus/Transport" connectionString="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey" />
  </connectionStrings>

<AzureSagaPersisterConfig ConnectionString="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey" CreateSchema="true" />
  <AzureTimeoutPersisterConfig ConnectionString="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey" TimeoutManagerDataTableName="TimeoutManagerData" TimeoutDataTableName="TimeoutData" />
  <AzureSubscriptionStorageConfig ConnectionString="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey" />
System.NullReferenceException was unhandled by user code
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=Microsoft.Data.Services.Client
  StackTrace:
       at System.Data.Services.Client.UriWriter.VisitResourceSetExpression(ResourceSetExpression rse)
       at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
       at System.Data.Services.Client.UriWriter.Translate(DataServiceContext context, Boolean addTrailingParens, Expression e, Uri& uri, Version& version)
       at System.Data.Services.Client.DataServiceQueryProvider.Translate(Expression e)
       at System.Data.Services.Client.DataServiceQuery`1.Translate()
       at System.Data.Services.Client.DataServiceQuery`1.Execute()
       at System.Data.Services.Client.DataServiceQuery`1.GetEnumerator()
       at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
       at NServiceBus.Azure.SafeLinqExtensions.SafeFirstOrDefault[TSource](IEnumerable`1 source) in y:\BuildAgent\work\ba77a0c29cee2af1\src\NServiceBus.Azure\SafeLinqExtensions.cs:line 13
       at NServiceBus.Azure.TimeoutPersister.TryGetLastSuccessfulRead(ServiceContext context, TimeoutManagerDataEntity& lastSuccessfulReadEntity) in
       y:\BuildAgent\work\ba77a0c29cee2af1\src\NServiceBus.Azure\Timeout\TimeoutLogic\TimeoutPersister.cs:line 338
       at NServiceBus.Azure.TimeoutPersister.GetNextChunk(DateTime startSlice, DateTime& nextTimeToRunQuery) in y:\BuildAgent\work\ba77a0c29cee2af1\src\NServiceBus.Azure\Timeout\TimeoutLogic\TimeoutPersister.cs:line 27
       at NServiceBus.Timeout.Hosting.Windows.TimeoutPersisterReceiver.Poll(Object obj) in y:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Timeout\Hosting\Windows\TimeoutPersisterReceiver.cs:line 80
       at System.Threading.Tasks.Task.InnerInvoke()
       at System.Threading.Tasks.Task.Execute()