У меня проблемы с моей системой веб-форм ASP.NET.
Это сработало на нашем тестовом сервере, но сейчас мы запускаем его, один из серверов находится в демилитаризованной зоне, а SQL-сервер - снаружиоб этом (в нашей сети все еще, хотя - хотя другая подсеть)
Я полностью открыл брандмауэр между этими двумя полями, чтобы увидеть, если это было проблемой, и он все еще выдает сообщение об ошибке «Связь с базовымдиспетчер транзакций терпел неудачу "всякий раз, когда мы пытаемся использовать" TransactionScope ".Мы можем получить доступ к данным для извлечения, это просто транзакции, которые их нарушают.
Мы также использовали msdtc ping для проверки соединения и с поправками на брандмауэре, которые успешно проверяют связь, но возникает та же ошибка!
Как мне разрешить эту ошибку?
Любая помощь будет полезна, потому что у нас есть система, которая будет запущена сегодня.Паника:)
Редактировать: Я создал более простую тестовую страницу с транзакцией, как показано ниже, и это прекрасно работает.Может ли вложенная транзакция вызвать такую ошибку, и если да, то почему это может вызвать проблему только при использовании live box в dmz с брандмауэром?
AuditRepository auditRepository = new AuditRepository();
try
{
using (TransactionScope scope = new TransactionScope())
{
auditRepository.Add(DateTime.Now, 1, "TEST-TRANSACTIONS#1", 1);
auditRepository.Save();
auditRepository.Add(DateTime.Now, 1, "TEST-TRANSACTIONS#2", 1);
auditRepository.Save();
scope.Complete();
}
}
catch (Exception ex)
{
Response.Write("Test Error For Transaction: " + ex.Message + "<br />" + ex.StackTrace);
}
Это ErrorStack, который мы получаем, когда проблемапроисходит: в
System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[]
propagationToken) at
System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction tx)
at System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction tx)
at System.Transactions.EnlistableStates.Promote(InternalTransaction tx) at
System.Transactions.Transaction.Promote() at
System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction
transaction) at System.Transactions.TransactionInterop.GetExportCookie(Transaction
transaction, Byte[] whereabouts) at
System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(Transaction
transaction, Byte[] whereAbouts) at
System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) at
System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx) at
System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) at
System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction
transaction) at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection
owningObject) at
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection
owningConnection) at
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection
outerConnection, DbConnectionFactory connectionFactory) at
System.Data.SqlClient.SqlConnection.Open() at
System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) at
System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() at
System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() at
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression
query) at
System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject
item) at System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject
item) at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) at
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) at
System.Data.Linq.DataContext.SubmitChanges() at RegBook.classes.DbBase.Save() at
RegBook.usercontrols.BookingProcess.confirmBookingButton_Click(Object sender, EventArgs e)