प्रति परावर्तक , TransactionScope
के रचनाकारों के साथ लेन-देन का समय निर्धारित करने के लिए मूल नियम निम्नानुसार हैं:
डिफ़ॉल्ट समय Out से नीचे है कि संतुष्ट है पहला नियम से निर्धारित होता है:
- अगर निर्माता एक
TimeSpan
पैरामीटर है, DefaultTimeout कि पैरामीटर
- अगर निर्माता एक
TransactionOption
पैरामीटर है है, DefaultTimeout transactionOption.TimeOut
है
- यदि निर्माता के पास
TransactionScopeOption
पैरामीटर है, तो डिफॉल्टटाइमआउट scopeOption.TimeOut
- यदि निर्माता के पास टाइमआउट पैरामीटर नहीं है, तो डिफ़ॉल्ट टाइमआउट ऐप या वेब कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट मान है।
- अन्यथा, DefaultTimeOut 1 मिनट है।
MaxTimeOut जब तक एक और मूल्य machine.config में निर्दिष्ट किया जाता 10 मिनट है।
लेनदेन के लिए प्रभावी टाइमआउट मैक्सटाइमऑट और डिफॉल्टटाइमऑट से छोटा है जो शून्य से अधिक है। यदि मैक्सटाइमऑट और डिफॉल्टटाइम दोनों शून्य हैं, तो प्रभावी टाइमआउट long.MaxValue
(अनंतता) द्वारा दर्शाए गए टिकों की संख्या है।
यदि TransactionScope
उदाहरण एक नया लेनदेन नहीं बनाता है या तो लेनदेन अपने कन्स्ट्रक्टर में पास हो जाता है, या क्योंकि लेनदेन के दायरे के विकल्प की आवश्यकता नहीं होती है (उदाहरण के लिए, जब परिवेश लेनदेन मौजूद होता है और लेनदेन स्कोपऑप्शन आवश्यक है) लेकिन एक timeOut
पैरामीटर अभी भी निर्माता में पारित किया गया है, एक टाइमर शुरू हो गया है। जब टाइमआउट अवधि समाप्त हो जाती है, अंतर्निहित लेनदेन की TimeOut()
विधि कहा जाता है। इस मामले में DefaultTimeOut और MaxTimeOut गुणों का उपयोग नहीं किया जाता है।
यदि transactionScopeOption == TransactionScopeOption.Supress
है, तो टाइमआउट को अनदेखा किया जाता है और इसका कोई प्रभाव नहीं पड़ता है।
यह भी संभव एप्लिकेशन/वेब कॉन्फ़िग फ़ाइल में MaxTimeOut परिभाषित करने के लिए, अगर machine.config के प्रासंगिक अनुभागों ओवरराइड की गई है (allowDefintion के मूल्यों ध्यान दें और allowExeDefinition गुण) है:
<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineToApplication" allowExeDefinition="MachineToApplication"/>
</sectionGroup>
public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout, EnterpriseServicesInteropOption interopOption);
public TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions, EnterpriseServicesInteropOption interopOption);
public TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions);
public TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout);
public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout);
public TransactionScope(TransactionScopeOption scopeOption);
क्या कॉन्फ़िग फ़ाइल में आप इस स्थापित किया था: त्वरित संदर्भ के लिए, यहाँ TransactionScope निर्माता ये हैं? किस विन्यास खंड में? – PVitt
सीधे root के अंतर्गत app.confing में। Web.config में भी, लेकिन उपर्युक्त परीक्षण app.config के लिए था। –
MattH