我在iis(在Windows服务器2012上)有一个Web应用程序,它在始终运行模式下工作。这个应用程序是用asp.net(.NET 4.5.1)编写的,使用nhibernate(v.4.1.1.4000)来处理db(Sql Server 2012),使用log4net(v 1.2.11)的日志,启动多个程序和在多线程模式下工作,通常它工作正常。 我尝试在IIS中启用Web园区,在应用程序池上放置3个最大工作进程,但我发现了一些关键的例外:
System.IndexOutOfRangeException:检测到可能的I / O竞争条件 在复制记忆时。默认情况下,I / O包不是线程安全的。 在多线程应用程序中,必须在a中访问流 线程安全的方式,例如返回的线程安全包装器 TextReader或TextWriter的同步方法。这也适用 到StreamWriter和StreamReader这样的类。
在System.Buffer.InternalBlockCopy(Array src,Int32 srcOffsetBytes, Array dst,Int32 dstOffsetBytes,Int32 byteCount)
在System.IO.StreamWriter.Write(Char []缓冲区,Int32索引,Int32 计数)
at System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
at NHibernate.Loader.Loader.GetResultSet(IDbCommand st,Boolean autoDiscoverTypes,布尔可调用,RowSelection选择, ISessionImplementor session)
在NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters,Boolean returnProxies, IResultTransformer forcedResultTransformer)
在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session,QueryParameters queryParameters,Boolean returnProxies, IResultTransformer forcedResultTransformer)
在NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters,IResultTransformer forcedResultTransformer)
---内部异常堆栈跟踪结束---
---内部异常堆栈跟踪结束---
在NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters,IResultTransformer forcedResultTransformer)
at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor) session,QueryParameters queryParameters)
at NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor 会话)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria,IList 结果)
at NHibernate.Impl.CriteriaImpl.List(IList results)
at NHibernate.Impl.CriteriaImpl.ListT
我认为网络花园只是在不同的进程和分离的应用程序域中生成我的应用程序的多个实例,但事实并非如此。 任何人都知道NHibernate的这个问题,可以建议我任何解决方法吗?
谢谢