लेनदेन प्रबंधक ने दूरस्थ / नेटवर्क लेनदेन के लिए अपने समर्थन को अक्षम कर दिया है


86

मैं SQL सर्वर और ASP.NET का उपयोग कर रहा हूँ। मेरा निम्नलिखित कार्य है:

Using js = daoFactory.CreateJoinScope()
    Using tran = New Transactions.TransactionScope()
        '...
        tran.Complete()
    End Using
End Using

हालांकि, अपवाद ' लेनदेन प्रबंधक ने दूरस्थ / नेटवर्क लेनदेन के लिए अपने समर्थन को अक्षम कर दिया है। ’फेंक दिया जाता है।

JoinScope का विवरण:

Public Class JoinScope
    Implements IJoinScope
    Implements IDisposable
    '...
End Class

मैंने बिना किसी समस्या के समान वातावरण के साथ एक अन्य एप्लिकेशन में इस तरह से काम किया है, लेकिन यहां मुझे यह समस्या है। समस्या को ठीक करने के लिए मैं क्या कर सकता था?


मैग्नस ने जो कदम उठाए, मैंने पहले यह सुनिश्चित करने के लिए कदम उठाए कि मेरे पास सभी आधार शामिल हैं, इसलिए बोलने के लिए, और फिर एक त्रुटि प्राप्त करने में कामयाब रहे जो यह सेट करने में सक्षम था कि मैं SQL सर्वर में clr सक्षम करता हूं, और यह मेरे लिए काम करता है। msdn.microsoft.com/en-us/library/ms131048.aspx
ली

जवाबों:


141

सुनिश्चित करें कि "वितरित लेनदेन समन्वयक" सेवा डेटाबेस और क्लाइंट दोनों पर चल रही है। यह भी सुनिश्चित करें कि आप "नेटवर्क डीटीसी एक्सेस", "रिमोट क्लाइंट की अनुमति दें", "इनबाउंड / आउटबाउंड की अनुमति दें" और "टीआईपी सक्षम करें" की जांच करें।

एमएस डीटीसी लेनदेन के लिए नेटवर्क डीटीसी एक्सेस को सक्षम करने के लिए

  1. घटक सेवाएँ स्नैप-इन खोलें।

    घटक सेवाएँ खोलने के लिए, प्रारंभ पर क्लिक करें। खोज बॉक्स में, dcomcnfg टाइप करें, और उसके बाद ENTER दबाएँ।

  2. DTC का पता लगाने के लिए कंसोल ट्री का विस्तार करें (उदाहरण के लिए, स्थानीय DTC) जिसके लिए आप नेटवर्क MS DTC एक्सेस को सक्षम करना चाहते हैं।

  3. क्रिया मेनू पर, गुण क्लिक करें।

  4. सुरक्षा टैब पर क्लिक करें और निम्नलिखित बदलाव करें: सुरक्षा सेटिंग्स में, नेटवर्क डीटीसी एक्सेस चेक बॉक्स का चयन करें।

    लेन-देन प्रबंधक संचार में, इनबाउंड की अनुमति दें और आउटबाउंड की अनुमति दें चेक बॉक्स का चयन करें।


3
धन्यवाद, मैग्नस। यह एप्लिकेशन की एक सेटिंग होनी चाहिए, क्योंकि इस प्रकार के लेनदेन ने एक ही कंप्यूटर के साथ काम किया, जिसका अर्थ है कि यह समस्या मशीन से संबंधित नहीं है।
लाजोस अर्पाद

हाँ, मैंने किया। यह एक ही अपवाद फेंकता है।
लाजोस अर्पाद

मुझे लगता है कि यह वास्तव में TransactionScope के अंदर आप क्या कर रहे हैं के साथ क्या करना है।
मैग्नस

साथ ही, मुझे जॉइन स्कोप की आवश्यकता है, क्योंकि मैं चाहता हूं कि यह लेनदेन डेटाबेस सर्वर के लिए एक अनुरोध के रूप में भेजा जाए।
लाजोस अर्पाद

13
सुनिश्चित करें कि आप लेन-देन के अंदर सभी डेटाबेस कॉल के लिए एक ही खुले कनेक्शन का उपयोग करते हैं।
मैग्नस

11

मुझे यह मुद्दा रुक-रुक कर मिल रहा था, मैंने यहां के निर्देशों का पालन किया था और बहुत कुछ इसी तरह का था। सभी को सही ढंग से कॉन्फ़िगर किया गया था।

इस पृष्ठ: http://sysadminwebsite.wordpress.com/2012/05/29/9/ ने मुझे समस्या खोजने में मदद की।

मूल रूप से मैं दोनों सर्वरों पर MSDTC के लिए CID की डुप्लिकेट थी। HKEY_CLASSES_ROOT \ सीआईडी

देखें: http://msdn.microsoft.com/en-us/library/aa561924.aspx अनुभाग सुनिश्चित करें कि MSDTC को एक विशिष्ट CID मान दिया गया है

मैं वर्चुअल सर्वर के साथ काम कर रहा हूं और हमारी सर्वर टीम प्रत्येक सर्वर के लिए एक ही छवि का उपयोग करना पसंद करती है। यह एक साधारण फिक्स है और हमें पुनरारंभ की आवश्यकता नहीं है। लेकिन डीटीसी सेवा को स्वचालित स्टार्टअप के लिए सेटिंग की आवश्यकता थी और फिर से स्थापित होने के बाद शुरू करने की आवश्यकता थी।


9

मेरे पास एक स्टोर प्रक्रिया थी जो "लिंक्ड सर्वर" में एक और स्टोर प्रक्रिया को कॉल करती है। जब मैंने इसे ssms में निष्पादित किया, तो यह ठीक था, लेकिन जब मैं इसे एप्लिकेशन (एंटिटी फ्रेमवर्क) में कहता हूं, तो मुझे यह त्रुटि मिली। इस लेख से मुझे मदद मिली और मैंने इस स्क्रिप्ट का उपयोग किया:

EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;

अधिक विवरण के लिए इसे देखें: लिंक्ड सर्वर: भागीदार लेनदेन प्रबंधक ने दूरस्थ / नेटवर्क लेनदेन के लिए अपने समर्थन को अक्षम कर दिया है


1
किसी समाधान के लिए लिंक का स्वागत है, लेकिन कृपया सुनिश्चित करें कि आपका उत्तर इसके बिना उपयोगी है: लिंक के चारों ओर संदर्भ जोड़ें ताकि आपके साथी उपयोगकर्ताओं को कुछ पता चले कि यह क्या है और यह क्यों है, तो पृष्ठ के सबसे प्रासंगिक हिस्से को उद्धृत करें ' मामले में लक्ष्य पृष्ठ अनुपलब्ध होने पर पुनः लिंक करना। ऐसे लिंक जो किसी लिंक से बहुत कम हैं उन्हें हटाया जा सकता है।
पेट्टर फ्रीबर्ग

1
इससे मेरी समस्या हल हो गई, इसलिए इसे प्रदान करने के लिए धन्यवाद। मुझे नहीं पता कि इसे -1 वोट क्यों मिला, क्योंकि इसने मेरी विशिष्ट समस्या को ठीक करने का काम किया।
बॉयड पी

6

मेरे परिदृश्य में, अपवाद को फेंका जा रहा था क्योंकि मैं पहले से मौजूद कनेक्शन पर एक TransactionScope के भीतर एक नया कनेक्शन उदाहरण बनाने की कोशिश कर रहा था:

उदाहरण:

void someFunction()
{
    using (var db = new DBContext(GetConnectionString()))
    {
        using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
        {
            someOtherFunction(); // This function opens a new connection within this transaction, causing the exception.
        }
    }
}

void someOtherFunction()
{
    using (var db = new DBContext(GetConnectionString()))
    {
        db.Whatever // <- Exception.
    }
}

3

जवाब से टिप्पणी : "सुनिश्चित करें कि आप लेन-देन के अंदर सभी डेटाबेस कॉल के लिए एक ही खुले कनेक्शन का उपयोग करते हैं। - मैग्नस"

हमारे उपयोगकर्ता लेनदेन में जिस डेटा के साथ काम कर रहे थे, उससे एक अलग डीबी में संग्रहीत हैं। उपयोगकर्ता को पाने के लिए db कनेक्शन को खोलना मेरे लिए यह त्रुटि पैदा कर रहा था। लेन-देन के दायरे से बाहर अन्य डीबी कनेक्शन और उपयोगकर्ता देखने को ले जाना त्रुटि तय करता है।


1

मैं नीचे दिए गए समाधान को यहां पोस्ट करता हूं क्योंकि कुछ खोज के बाद यह वह जगह है जहां मैं उतरा, इसलिए अन्य भी हो सकता है। मैं संग्रहीत कार्यविधि को कॉल करने के लिए EF 6 का उपयोग करने का प्रयास कर रहा था, लेकिन एक समान त्रुटि थी क्योंकि संग्रहीत कार्यविधि में एक लिंक किया गया सर्वर उपयोग किया जा रहा था ।

ऑपरेशन नहीं किया जा सका क्योंकि लिंक किए गए सर्वर के लिए OLE DB प्रदाता _ एक वितरित लेनदेन शुरू करने में असमर्थ था

भागीदार लेनदेन प्रबंधक ने दूरस्थ / नेटवर्क लेनदेन के लिए अपने समर्थन को अक्षम कर दिया है *

SQL क्लाइंट पर कूदने से मेरी समस्या ठीक हो गई, जिसने मेरे लिए भी पुष्टि की कि यह एक ईएफ चीज थी।

EF मॉडल उत्पन्न विधि आधारित प्रयास:

db.SomeStoredProcedure();

ExecuteSqlCommand आधारित प्रयास:

db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");

साथ में:

var connectionString = db.Database.Connection.ConnectionString;
var connection = new System.Data.SqlClient.SqlConnection(connectionString);    
var cmd = connection.CreateCommand();
cmd.CommandText = "exec [SomeDB].[dbo].[SomeStoredProcedure]";

connection.Open();
var result = cmd.ExecuteNonQuery();

उस कोड को छोटा किया जा सकता है, लेकिन मुझे लगता है कि यह संस्करण डिबगिंग और स्टेपिंग के लिए थोड़ा अधिक सुविधाजनक है।

मुझे विश्वास नहीं होता है कि Sql Client आवश्यक रूप से एक पसंदीदा विकल्प है, लेकिन मुझे लगा कि यह कम से कम साझा करने के लायक था अगर किसी और को भी इसी तरह की समस्या हो तो वह यहां Google द्वारा उतरा जाए।

उपरोक्त कोड C # है, लेकिन Sql क्लाइंट पर स्विच करने की कोशिश की अवधारणा अभी भी लागू होती है। बहुत कम से कम यह करने के लिए प्रयास करने के लिए नैदानिक ​​होगा।


दिलचस्प। मुझे लगता है कि आप समाधान को VB कोड के साथ संपादित करना चाहते हैं (कोड अनुवादक उपलब्ध हैं), इसलिए यह प्रश्न के टैग से मेल खाएगा। हालांकि, मैंने इसे फिर भी उतारा।
लाजोस अर्पाद

1

यदि आप घटक सेवाओं में स्थानीय डीटीसी को नहीं पा सके हैं तो पहले इस पॉवरशेल स्क्रिप्ट को चलाने का प्रयास करें:

$DTCSettings = @(
"NetworkDtcAccess",               # Network DTC Access
"NetworkDtcAccessClients",        # Allow Remote Clients        ( Client and Administration)
"NetworkDtcAccessAdmin",          # Allow Remote Administration ( Client and Administration)
"NetworkDtcAccessTransactions",   #                (Transaction Manager Communication )
"NetworkDtcAccessInbound",        # Allow Inbound  (Transaction Manager Communication )
"NetworkDtcAccessOutbound" ,      # Allow Outbound (Transaction Manager Communication )
"XaTransactions",                 # Enable XA Transactions
"LuTransactions"                  # Enable SNA LU 6.2 Transactions
)
foreach($setting in $DTCSettings)
{
Set-ItemProperty -Path HKLM:\Software\Microsoft\MSDTC\Security -Name $setting -Value 1
} 
Restart-Service msdtc

और ऐसा प्रतीत होता है!

स्रोत: भागीदार लेनदेन प्रबंधक ने दूरस्थ / नेटवर्क लेनदेन के लिए अपने समर्थन को अक्षम कर दिया है


0

मामले में दूसरों के पास एक ही मुद्दा है:

मुझे एक समान त्रुटि हो रही थी। पता चला कि मैं एक लेनदेन में कई एसक्यूएल बयानों को लपेट रहा था, जहां उनमें से एक लिंक किए गए सर्वर पर निष्पादित किया गया था (एक EXEC (...) एटी सर्वर स्टेटमेंट में मर्ज स्टेटमेंट)। मैंने लिंक किए गए सर्वर में एक अलग कनेक्शन खोलकर, उस कथन को एक प्रयास में संलग्न करके समस्या का समाधान किया ... पकड़ में फंसने की स्थिति में मूल कनेक्शन पर लेनदेन को रद्द करें।


0

मेरे पास एक ही त्रुटि संदेश था। मेरे लिए कनेक्शन स्ट्रिंग में बदलाव pooling=Falseसे ;pooling=true;Max Pool Size=200समस्या ठीक हो गई।


0

मैं एक संग्रहीत सर्वर बनाने की कोशिश करते हुए SSMS में एक लिंक किए गए सर्वर के साथ इस समस्या को ले रहा था।

लिंक किए गए सर्वर पर, मैंने सर्वर विकल्प "डिसेबल प्रमोशन ऑन डिस्ट्रिब्यूटेड ट्रांजेक्शन पर सक्षम" को बदल दिया।

सर्वर विकल्प का स्क्रीनशॉट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.