2011-08-12 10 views
6

मैंने डेस्कटॉप क्लाइंट अनुप्रयोगों के साथ अतीत में ट्रांज़ेक्शनस्कोप का उपयोग अपूर्ण बहु-चरण लेनदेन को वापस करने के लिए किया है। उस दृष्टिकोण को वेब अनुप्रयोग में काम करने की संभावना नहीं लगती है।मल्टी-स्टेप डेटाबेस लेनदेन कई HTTP अनुरोधों में विभाजित

कोई भी ऐसे तरीकों का सुझाव दे सकता है जिसमें कई पृष्ठों पर कई चरणों को वापस रोल करने के लिए सुनिश्चित किया जा सकता है यदि पूरी प्रक्रिया पूरी नहीं हो जाती है? (उनके ब्राउज़र दुर्घटनाग्रस्त हो जाते हैं या वे ब्राउज़र को मध्य प्रक्रिया में बंद करते हैं उदाहरण के लिए)

निश्चित रूप से, मैं किसी प्रकार की एक अस्थायी तालिका में लिख सकता हूं, फिर अंतिम रिकॉर्ड को एक ही लेनदेन में वास्तविक तालिका में स्थानांतरित कर सकता हूं, लेकिन यह चलता है दौड़ की स्थिति का जोखिम। मैं एक लेनदेन शुरू करना चाहता हूं, कई पेजों की सेवा करता हूं, प्रत्येक पृष्ठ लेन-देन का एक टुकड़ा तालिका में लिखता है, फिर लेनदेन को पूरा करने के साथ लेनदेन को पूरा करता है, और यदि लेनदेन पूरा नहीं होता है, तो यह वापस लुढ़का जाता है सत्र समाप्त होता है।

या क्या मैं सही तरीके से नहीं सोच रहा हूं? सुझाव?

चूंकि मैं एमवीसी 3, ईएफ 4.1 और निनजेक्ट का उपयोग कर रहा हूं, मुझे यकीन नहीं है कि यह समाधान को कैसे प्रभावित करेगा, लेकिन मैंने सोचा कि मैं उस जानकारी को शामिल करूंगा।

उत्तर

8

कई पृष्ठों में कोई डेटाबेस लेनदेन/TransactionScope नहीं है। यहां तक ​​कि ऐसा कुछ करने की कोशिश भी बहुत गलत है।

आप समस्या को हल करने दो विकल्प हैं: Session

स्टोर सत्र में अपने डेटा

  • उपयोग और डेटाबेस उपयोगकर्ता सभी चरणों को पूरा करता ही अगर यह करने के लिए जारी रहती है, और इस बात की पुष्टि बचाने । यह निश्चित रूप से आपको चाहिए।]

  • वर्कफ़्लो नींव और लंबे समय तक चलने वाले लेनदेन का उपयोग करें।

    लंबे समय तक चलने वाले लेनदेन डेटाबेस लेनदेन नहीं हैं - वे एक पूरी तरह से कस्टम समाधान हैं जहां आपको मैन्युअल रूप से मुआवजे (लंबे समय तक चलने वाले लेनदेन का रोलबैक) लागू करना होगा। आपको अभी भी किसी भी तरह का पता लगाना है कि आपके वर्कफ़्लो को मुआवजा दिया जाना चाहिए, लेकिन यह आपके समाधान के लिए आवश्यक नहीं है। यह एक ऐसे समाधान के लिए है जहां आपको कई सत्रों के लिए "लेनदेन" की आवश्यकता होती है।

+0

इसका मतलब है कि आपको मैन्युअल रूप से समरूपता से निपटना होगा। यह मुझे एक कोड गंध की तरह लगता है। –

+0

वेब अनुप्रयोग में मैन्युअल रूप से हैंडलिंग कंसुरेंसी काफी आम है। डाटाबेस लेन-देन जितना संभव हो उतना छोटा होना चाहिए - अधिकांश सामान्य परिदृश्यों में दूसरे का अंश। आप जो करना चाहते हैं वह कई मिनटों के लिए डेटाबेस में गहन लॉकिंग का मतलब है = आपका आवेदन बहुत खराब प्रदर्शन करेगा। –

1

आप nservicebus या masstransit सेट अप करने और उनके सागा facilies का उपयोग करने के लिए देख सकते हैं।

+0

एक सेवा बस अनावश्यक लगता है कि मैं एक आईओसी का भी उपयोग कर रहा हूं जो सेवा स्थान करता है। –

+3

@ मिस्टेर इसका कोई मतलब नहीं है। आईओसी से सेवा बसें बहुत अलग हैं। सागा आपकी दौड़ की स्थिति को खत्म कर देगा और बहुत स्पष्ट राज्य संक्रमण (संदेश) की अनुमति देगा। हालांकि आप शायद एक अस्थायी तालिका का उपयोग करके दूर हो सकते हैं। – Ryan

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