我試圖運行一個使用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));
潛在值得注意:我可以防止異常如果我將TransportTransactionMode
從SendsAtomicWithReceive
更改爲None
就會被拋出。但我不想這樣做,因爲它會導致所有失敗的消息直接轉到錯誤隊列,繞過所有重試。
其實,我剛剛發現我們團隊中的其他人已經與來自特定人(西蒙我相信?)的其他人聯繫過這個問題。就緊急情況而言,我不會說因爲有解決方法而非常緊迫。但是,我們的情況並不完全需要解決方法。 – RobotJones
我明白了,我會讓你更新! – wlabaj