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