मेरे पास एक नियमित है जो एक SQL सर्वर 2005 डेटाबेस में आइटम डालने के लिए रिकर्सिव लूप का उपयोग करता है पहला लूप जो लूप शुरू करता है लेनदेन स्कोप का उपयोग कर लेनदेन के भीतर संलग्न होता है। जब मैं पहली बार ProcessItem को कॉल करता हूं तो myItem डेटा अपेक्षित रूप से डेटाबेस में डाला जाता है। हालांकि जब ProcessItem को ProcessItemLinks या ProcessItemComments से बुलाया जाता है तो मुझे निम्न त्रुटि मिलती है।लेनदेनस्कोप ऑपरेशन वैध क्यों नहीं है?
मैं विंडोज 7 पर वी.एस. 2008 के साथ डिबग में यह चला रहा हूँ "आपरेशन लेन-देन के राज्य के लिए मान्य नहीं है" और MSDTC वितरित लेनदेन सुनिश्चित करना चल रहा है। नीचे दिया गया कोड मेरा उत्पादन कोड नहीं है लेकिन बिल्कुल वही सेट है। AddItemToDatabase एक वर्ग पर एक विधि है जिसे मैं संशोधित नहीं कर सकता और मानक ExecuteNonQuery() का उपयोग करता हूं जो एक कनेक्शन बनाता है और फिर पूरा हो जाता है और बंद हो जाता है।
मैंने यहां और इंटरनेट पर अन्य पोस्टिंग देखी है और अभी भी इस समस्या को हल नहीं कर सकते हैं। कोई भी सहायताकाफी प्रशंसनीय होगी।
using (TransactionScope processItem = new TransactionScope())
{
foreach (Item myItem in itemsList)
{
ProcessItem(myItem);
}
processItem.Complete();
}
private void ProcessItem(Item myItem)
{
AddItemToDatabase(myItem);
ProcessItemLinks(myItem);
ProcessItemComments(myItem);
}
private void ProcessItemLinks(Item myItem)
{
foreach (Item link in myItem.Links)
{
ProcessItem(link);
}
}
private void ProcessItemComments(Item myItem)
{
foreach (Item comment in myItem.Comments)
{
ProcessItem(comment);
}
}
यहां स्टैक ट्रेस का शीर्ष भाग है। दुर्भाग्य से मैं इस बिंदु तक निर्माण को अपनी कंपनी संवेदनशील जानकारी के रूप में नहीं दिखा सकता जिसे मैं प्रकट नहीं कर सकता।
at System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, Transaction atomicTransaction)
at System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification)
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()
आप स्टैक ट्रेस पोस्ट किया जा सका अपवाद का? –
मैंने अनुमति के रूप में अधिकतर ट्रेस जोड़े हैं। उम्मीद है कि यह पर्याप्त है! – Cragly
क्या आप पूरा अपवाद पोस्ट कर सकते हैं? Ex.ToString() के आउटपुट को पोस्ट करें, फिर कुछ भी संवेदनशील करें। मैं सोच रहा हूं कि एक इंनेरएक्सप्शन या दो है या नहीं। –