当前位置: 首页 > 知识库问答 >
问题:

具有Azure存储的NServiceBus 4在TimeoutPersis中获得NullReourceExc0019

詹夕
2023-03-14

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

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

我尝试使用存储模拟器和部署到Azure的所有内容运行此本地,但两者都有相同的错误。

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

全球的尽快。反恐精英

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();
    }
}

Web.config

<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()

即使有错误,消息也会被添加到Azure队列中并正在处理,但只持续几分钟,TimeoutManager就会停止处理,消息不会退出队列。

共有1个答案

宰父德馨
2023-03-14

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

 类似资料:
  • 每当azure blob存储中有修改时,我们都需要捕获azure cosmos db中的文件细节和事件时间。例如,我从azure blob存储中删除了一个文件,并在一个容器中删除了需要在azure cosmosdb中捕获的信息。我试着用事件网格触发azure功能,但不适合我。你能为这个场景提供azure函数的例子吗

  • 我正在尝试为我的应用程序列出内部存储和外部存储中的所有歌曲作为列表视图。我正在使用下面的代码来获取歌曲 以上代码正在成功地获取外部存储器中的所有歌曲,但未获取内部存储器中存储的歌曲。这在像三星Galaxy S8这样没有外置存储的设备中是一个问题。我还尝试了使用以下uri的光标 这为我获取设备铃声和短信音调,这不是我需要的。 我在StackOverflow中也遇到过类似的问题,但那里的答案并没有为我

  • 总结频段 详细信息带的显示取决于我指定的表达式。另外,细节带的内容是子报告,每个细节带一个(不知道这是否相关)。 我试图实现的是在没有任何过滤器作为ID或表的任何其他字段的情况下执行报告。相反,我希望提取一个特定表的所有寄存器的信息(让我们将表命名为USER)。 页眉 详细信息1(对于用户1) 详细信息2(对于用户1) 谢了!

  • 我要确定一个在Azure表存储中存储日志信息的好策略。我有以下内容: PartitionKey:日志的名称。 ROWKEY:倒置的日期时间刻度, 这里唯一的问题是分区可能会变得非常大(数百万个实体),并且大小会随着时间的推移而增加。 但尽管如此,所执行的查询类型将始终包括(不扫描)和筛选器(小扫描)。 例如(在自然语言中): 如果查询同时在和上完成,那么我理解分区的大小并不重要。

  • 我今天面试了,我的面试官问我如何在HashMap中存储具有相同键的多个值?她给了我这个例子—— 我在如何使用HashMap时给了她以下解决方案: 整数是字符串的长度,ArrayList将存储该特定长度的字符串。 面试官说这是使用HashMap的一种方式,但还有另一种方式我不需要ArrayList或任何其他数据结构。在面试期间,我无法想出任何解决方案,现在在谷歌搜索了足够多之后,我仍然一无所获。有人