2017-08-08 65 views
0

我试图运行一个使用SQL Server传输和SQL持久性的NServiceBus主机应用程序。当我将transport和persistence连接字符串都指向同一个数据库时,一切正常。然而,当我指出他们单独的数据库,在收到了第一条消息,抛出该异常的程序崩溃:System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'persistence.MyService_MySaga'.NServiceBus不同数据库上的SQL Server传输和SQL持久性

这里是我的端点配置:

var persistenceConnection = @"Data Source=.\SqlExpress;Database=MyServicePersistence;Integrated Security=True;Max Pool Size=100;"; 
var transportConnection = @"Data Source=.\SqlExpress;Database=MyServiceTransport;Integrated Security=True;Max Pool Size=100;"; 

var endpointConfiguration = new EndpointConfiguration("MyService"); 
endpointConfiguration.SendFailedMessagesTo("error"); 
endpointConfiguration.AuditProcessedMessagesTo("audit"); 
endpointConfiguration.EnableInstallers(); 

var transport = endpointConfiguration.UseTransport<SqlServerTransport>(); 
transport.ConnectionString(transportConnection); 
transport.UseSchemaForQueue("error", "dbo"); 
transport.UseSchemaForQueue("audit", "dbo"); 
transport.Transactions(TransportTransactionMode.SendsAtomicWithReceive); 

var persistence = endpointConfiguration.UsePersistence<SqlPersistence>(); 
persistence.SqlVariant(SqlVariant.MsSqlServer); 
persistence.ConnectionBuilder(() => new SqlConnection(persistenceConnection)); 
persistence.Schema("persistence"); 

var subscriptions = persistence.SubscriptionSettings(); 
subscriptions.CacheFor(TimeSpan.FromMinutes(1)); 

潜在值得注意:我可以防止异常如果我将TransportTransactionModeSendsAtomicWithReceive更改为None就会被抛出。但我不想这样做,因为它会导致所有失败的消息直接转到错误队列,绕过所有重试。

回答

1

好像你发现了我们实现中的一个错误,感谢提升它。

我在SQL持久性回购中创建了一个问题,您可以跟踪它there

我们很可能会在即将到来的新专业中发布修复程序,希望对您有用。你能指出问题的严重性吗?

+0

其实,我刚刚发现我们团队中的其他人已经与来自特定人(西蒙我相信?)的其他人联系过这个问题。就紧急情况而言,我不会说因为有解决方法而非常紧迫。但是,我们的情况并不完全需要解决方法。 – RobotJones

+0

我明白了,我会让你更新! – wlabaj