9

मैं कैसे विश्वसनीय रूप से जांच सकता हूं कि एमएसडीटीसी ने एक लेनदेन को एक वितरित लेनदेन में बढ़ावा दिया है?वितरित करने के लिए लेनदेन को बढ़ावा देने के लिए एमएसडीटीसी के लिए विश्वसनीय परीक्षण?

यह .NET में TransactionScope का उपयोग करते समय होता है।

वर्तमान में एक सहकर्मी अपनी मशीन पर समन्वयक बंद करके इसका परीक्षण कर रहा है - यदि कोई अपवाद फेंक दिया जाता है तो यह सबूत के रूप में लिया जाता है कि लेनदेन को बढ़ावा देने का प्रयास हुआ है। क्या यह एक वैध परीक्षण है?

+0

एमएसडीटीसी एक सुंदर ठोस उत्पाद है। क्या आप वाकई इसका परीक्षण करने की ज़रूरत है? – Steven

+1

@ स्टेवन - मुझे यह जांचने की ज़रूरत है कि लेनदेन को बढ़ावा दिया जा रहा है या नहीं। स्थिति यह है कि लेनदेन को बढ़ावा नहीं दिया जाना चाहिए, लेकिन मेरे सहकर्मी का मानना ​​था कि उन्हें पदोन्नत किया जा रहा है। हम आश्वस्त होने में कैसे सक्षम हैं? हम कैसे जांचते हैं कि लेनदेन को बढ़ावा दिया गया था या नहीं किया गया था? – Oded

+0

@ ओडेड: यदि लेनदेन को बढ़ावा नहीं दिया जाना चाहिए, तो आप 'लेनदेनस्कोप' का उपयोग क्यों कर रहे हैं? – Steven

उत्तर

12

मुझे लगता है कि आपका परीक्षण ठीक है हालांकि आपको यह सुनिश्चित करना चाहिए कि आपको एक डीटीसी अपवाद मिल रहा है और कुछ अन्य अपवाद नहीं है।

कुछ अन्य चीजें आप कर सकता है:

  • तुम भी एसक्यूएल प्रोफाइलर चला सकते हैं और लेन-देन के तहत DTCTransaction का पता लगाने।

  • कोड के संदर्भ में, आप DistributedTransactionStarted ईवेंट को संभाल सकते हैं और एक वितरित लेनदेन शुरू होने पर एक संदेश लॉग कर सकते हैं।

  • या आप लेनदेन के अंत से पहले System.Transactions.Transaction.Current. TransactionInformation.DistributedIdentifier लॉग इन करने के लिए केवल लॉग संदेश जोड़ सकते हैं। यदि मूल्य Guid.Empty {00000000-0000-0000-0000-000000000000} है तो यह एक वितरित लेनदेन नहीं है अन्यथा लेनदेन को एक वितरित लेनदेन में पदोन्नत किया गया है।

आपने कहा कि आप SQL Server 2008 का उपयोग कर रहे थे। .NET का कौन सा संस्करण आप उपयोग कर रहे हैं? क्या यह 3.5 है? यदि आप SQL Server 2008 and .NET 3.5 का उपयोग कर रहे हैं तो आप एक ही लेनदेन में एक ही डेटाबेस में एक ही लेनदेन में बढ़ने के बिना एकाधिक कनेक्शन (उसी कनेक्शन स्ट्रिंग का उपयोग करके) खोलने में सक्षम होना चाहिए। इसके लिए काम करने के लिए आपको दूसरा कनेक्शन खोलने से पहले पहले कनेक्शन को बंद करने की आवश्यकता है।

ऐसा लगता है कि सभी शर्तों को पूरा कर रहे हैं और लेन-देन अभी भी बढ़ रहे हैं, तो मैं करूंगा:

  • डबल एसक्यूएल सर्वर अनुकूलता स्तर
  • जांच जाँच कनेक्शन स्ट्रिंग यदि पूलिंग अक्षम किया गया है को देखने के लिए
  • जांच देखने के लिए कि दो कनेक्शन एक लेन-देन
  • पता लगाना में एक ही समय में खोला नहीं कर रहे हैं सभी लेन-देन को बढ़ावा दिया जा रहा है या केवल कुछ निश्चित परिस्थितियों में

अद्यतन:Distributed Transaction Coordinator(MSDTC) and Transaction FAQ एमएसडीटीसी संसाधनों की एक बड़ी सूची को एक साथ खींचता है।

+0

विस्तृत उत्तर के लिए धन्यवाद - आपने इस तरह के ज्ञान को कहाँ प्राप्त किया? क्या आप एमएसटीडीसी पर किसी भी संसाधन की सिफारिश कर सकते हैं? – Oded

+1

एमएसडीटीसी काम कर रहा है जब यह महान है। जब यह काम नहीं कर रहा है तब आप इसके बारे में सबसे ज्यादा सीखते हैं। :) सामान्य रूप से, एमएसडीएन में सबसे अच्छा एमएसडीटीसी संसाधन है। समस्या निवारण के लिए http://support.microsoft.com/kb/306843 आमतौर पर गोटो लेख रहा है लेकिन यह एक, http://msdn.microsoft.com/en-us/library/aa561924%28BTS.10%29.aspx , भी बहुत अच्छा है। विस्तृत उत्तर के लिए –

+0

+1 – IgorK

संबंधित मुद्दे