2010-02-24 11 views
12

हमारे पास कुछ लंबी चल रही बैक-एंड प्रक्रियाएं हैं जो डिफ़ॉल्ट 30 सेकंड से अधिक समय लेती हैं।एनएचबीर्नेट सत्र बदलना। कमांड टाइमआउट

हमारा एनएचबेर्नेट संस्करण 2.0.1.4000 है और Spring.NET 1.2.0.20313 है। NHibernate Spring.NET के माध्यम से इस तरह से कॉन्फ़िगर किया गया है:

<object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate20"> 
    <property name="DbProvider" ref="DbProvider"/> 
    <property name="MappingAssemblies"> 
     <list> 
      <value>SomeKindOfAnItem</value> 
     </list> 
    </property> 
    <property name="HibernateProperties"> 
     <dictionary> 
      <entry key="expiration" value="120"/> 
      <entry key="adonet.batch_size" value="10"/> 
      <entry key="cache.provider_class" value="NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache"/> 
      <entry key="cache.use_query_cache" value="true"/> 
      <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> 
      <entry key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> 
      <entry key="dialect" value="NHibernate.Dialect.MsSql2005Dialect"/> 
      <entry key="current_session_context_class" value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate20"/> 
      <entry key="show_sql" value="false"/> 
     </dictionary> 
    </property> 
</object> 

इस के आसपास पाने के लिए, मैं Web.config में से 60 NHibernate command_timeout स्थापित करने के लिए कोशिश कर रहा हूँ। यह Web.config से है:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="command_timeout">60</property> 
    </session-factory> 
</hibernate-configuration> 

दुर्भाग्य से यह काम नहीं करता है, आदेश का समय समाप्त 30 सेकंड के बाद।

मैंने एक कंसोल ऐप बनाया जो वेब ऐप की तरह डीएओ को कॉल करता है। मेरे पास इसकी कॉन्फ़िगरेशन फ़ाइल में सटीक एक ही NHibernate कॉन्फ़िगरेशन सेटिंग है। कॉन्फ़िगरेशन फ़ाइल से सफलतापूर्वक सेटिंग का उपयोग करते हुए IDbCommand 60 सेकंड के बाद और 30 नहीं।

मैंने ऐप को डिबग करने का प्रयास किया और जांच की कि क्या कमांडटाइम सेट किया गया था जब डीएओ असेंबली को वेब साइट से बुलाया गया था। ये था।

यह दृश्य स्टूडियो घड़ी से है:

((NHibernate.Driver.DriverBase) (((NHibernate.Connection.DriverConnectionProvider) ((NHibernate.Impl.SessionFactoryImpl) session.SessionFactory) .ConnectionProvider) .Driver)) CommandTimeout:। 60

सत्र ऐसा बनाया जाता है:

ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true); 

मेरा प्रश्न है: यदि कमांड टाइमआउट फ़ील्ड को सफलतापूर्वक मेरे वेब.कॉन्फिग से 60 पर सेट किया गया था, तो 30 सेकेंड के बाद यह समय क्यों समाप्त हो जाता है? कोई विचार मैं कोशिश कर सकता हूँ?

+0

मददगार होगा यदि आप समस्या का पुनरुत्पादन करने वाले छोटे नमूना ऐप पोस्ट करते हैं तो यह सहायक होगा। यह लिखना कि छोटा नमूना ऐप आपको यह स्पष्ट कर सकता है कि यह क्यों काम नहीं कर रहा है। –

+0

महान विचार, लेकिन मैंने पहले ही ऐसा किया था। मैंने समस्या को दोहराने के लिए एक कंसोल ऐप बनाया है, लेकिन कंसोल ऐप काम करता है और वेब ऐप नहीं करता है। – adomokos

उत्तर

11

आप टाइमआउट को hibernate.connection.connection_string प्रॉपर्टी के हिस्से के रूप में सेट कर सकते हैं। मैंने Spring.Net का उपयोग नहीं किया है, इसलिए मुझे यकीन नहीं है कि यह एनएचबीर्नेट सत्र कारखाने को कैसे स्थापित करता है। यदि आप कनेक्शन स्ट्रिंग में "कनेक्ट टाइमआउट = 120" जोड़ सकते हैं। इससे डिफ़ॉल्ट 30 सेकंड टाइमआउट से 120 सेकंड तक समय बढ़ाना चाहिए।

निम्न पंक्ति web.config में जाना होगा:

<property name="connection.connection_string">Server=localhost;initial catalog=nhibernate;User Id=;Password=; Connect Timeout=120;</property> 

संपादित

यह पता चला है कि वहाँ वास्तव में हैं कि दो समय समाप्ति। उस बिंदु को इंगित करने के लिए adomokos के लिए धन्यवाद। एक कनेक्शन के वास्तविक खुलने के लिए और दूसरा निष्पादित प्रश्नों के लिए।

कनेक्शन के लिए एक ऊपर प्रदर्शित होता है, हालांकि NH12ern48 के साथ एक क्वेरी के लिए टाइमआउट सेट करने के लिए आप ICriteria इंटरफ़ेस का उपयोग करते हैं।

ICriteria crit = session.CreateCriteria(typeof(Foo)); 
crit.SetTimeout(120); 
List<Foo> fooList = crit.List(); 

टाइमआउट मान सेकेंड में है।

आशा है कि

+6

दो अलग-अलग समय समाप्ति के होते हैं: 1) कनेक्शन टाइमआउट 2) कमान टाइमआउट आप 1 एक को बदलने में सुझाव दे रहे हैं, लेकिन मैं दूसरे सेट करना होगा। अधिक जानकारी के लिए इसे पढ़ें: http://tinyurl.com/ybpwkvl – adomokos

+0

दोह .. आप सही हैं। मैंने गलत चुना है –

+0

क्या आपने आईसीआरटीरिया इंटरफ़ेस पर सेटटाइमआउट का प्रयास किया है? जो संभवतः आप वास्तव में बाद में हैं। –

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