我的ASP.NET Web表單系統出現問題。MSDTC - 與底層事務管理器的通信失敗(防火牆打開,MSDTC網絡訪問)
它的工作我們的測試服務器上,但現在我們把它生活在其中一臺服務器一個DMZ內和SQL服務器之外的是(我們的網絡上仍然不過 - 雖然不同的子網)
我在這兩個盒子之間完全打開防火牆,看看是否是這個問題,並且每當我們嘗試使用「TransactionScope」時,它仍然會給出錯誤消息「與底層事務管理器的通信失敗」。我們可以訪問數據進行檢索,這只是破壞數據的事務。
我們還使用msdtc ping來測試連接,並在防火牆上修改成功,但發生同樣的錯誤!
我該如何解決這個錯誤?
任何幫助將是偉大的,因爲我們有一個系統今天上線。恐慌:)
編輯:我已經創建了一個更簡單的測試頁面,下面的事務,這工作正常。嵌套事務是否會導致這種錯誤,如果是這樣,爲什麼這隻會在使用防火牆的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)
如何在兩個方框上的msdtc安全設置?它允許入站和出站? – pdiddy 2010-03-23 14:30:04
另外,請確保msdtc處於防火牆例外狀態。 – pdiddy 2010-03-23 14:32:07
當前允許遠程客戶端,入站/出站和無需身份驗證(只需更改這一個)。在升級到MSDTC時使用多個數據上下文或數據庫連接似乎是一個問題。我讓我們的技術團隊臨時解鎖防火牆並打開兩臺服務器和MSDTC ping工具的所有端口,但仍然出現錯誤。我想哭 :) – Andrew 2010-03-23 15:25:16