मुझे लगता है कि निम्नलिखित वास्तुकला पर आधारित है एक MVC वेब एप्लिकेशन हैAsp.Net MVC UNitOfWork और MySQL और स्लीपिंग कनेक्शन
Asp.Net MVC2, Ninject, धाराप्रवाह NHibernate, MySQL जो काम पैटर्न की एक इकाई का उपयोग करता है।
MySQL से प्रत्येक कनेक्शन एक नींद कनेक्शन उत्पन्न करता है जिसे SHOW PROCESSLIST क्वेरी परिणामों में प्रविष्टि के रूप में देखा जा सकता है।
आखिरकार यह ऐप पूल सीमा को समाप्त करने और वेब ऐप को क्रैश करने के लिए पर्याप्त कनेक्शन पैदा करेगा।
मुझे संदेह है कि कनेक्शन सही ढंग से निपटान नहीं किए जा रहे हैं।
यदि यह मामला है और यह कैसे होना चाहिए?
public class UnitOfWork : IUnitOfWork
{
private readonly ISessionFactory _sessionFactory;
private readonly ITransaction _transaction;
public ISession Session { get; private set; }
public UnitOfWork(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
Session = _sessionFactory.OpenSession();
Session.FlushMode = FlushMode.Auto;
_transaction = Session.BeginTransaction(IsolationLevel.ReadCommitted);
}
public void Dispose()
{
if (Session != null)
{
if (Session.IsOpen)
{
Session.Close();
Session = null;
}
}
}
public void Commit()
{
if (!_transaction.IsActive)
{
throw new InvalidOperationException("No active transation");
}
_transaction.Commit();
Dispose();
}
public void Rollback()
{
if (_transaction.IsActive)
{
_transaction.Rollback();
}
}
}
public interface IUnitOfWork : IDisposable
{
void Commit();
void Rollback();
}
public class DataService
{
int WebsiteId = Convert.ToInt32(ConfigurationManager.AppSettings["Id"]);
private readonly IKeyedRepository<int, Page> pageRepository;
private readonly IUnitOfWork unitOfWork;
public PageService Pages { get; private set; }
public DataService(IKeyedRepository<int, Page> pageRepository,
IUnitOfWork unitOfWork)
{
this.pageRepository = pageRepository;
this.unitOfWork = unitOfWork;
Pages = new PageService(pageRepository);
}
public void Commit()
{
unitOfWork.Commit();
}
}
public class PageService
{
private readonly IKeyedRepository<int, Page> _pageRepository;
private readonly PageValidator _pageValidation;
public PageService(IKeyedRepository<int, Page> pageRepository)
{
_pageRepository = pageRepository;
_pageValidation = new PageValidator(pageRepository);
}
public IList<Page> All()
{
return _pageRepository.All().ToList();
}
public Page FindBy(int id)
{
return _pageRepository.FindBy(id);
}
}
इसे अपने आप को था जो उत्कृष्ट blog.bobcravens.com के बॉब Cravens के साथ संपर्क में था और मैं अब EndRequest + = प्रतिनिधि { IUnitOfWork UOW = Kernel.Get() का उपयोग कर रहा हूँ; uow.Dispose(); }; –