2017-12-07 8 views
0

서비스를 디버깅하는 데 어려움을 겪고 있습니다.아음 경쟁 상태가 각각의 새로운 DB 연결을 감지했습니다.

내가 실행중인 cenario를 설명하는 것으로 시작하겠습니다. 서비스 수입, 보고서 생성 및 데이터 내보내기를 사용하여 9 개의 데이터베이스를 확보했습니다.

Probable I/O race condition detected while copying memory. The I/O package is not thread safe by default. In multithreaded applications, a stream must be accessed in a thread-safe way, such as a thread-safe wrapper returned by TextReader's or TextWriter's Synchronized methods. This also applies to classes like StreamWriter and StreamReader. 
    at System.Buffer.InternalBlockCopy(Array src, Int32 srcOffsetBytes, Array dst, Int32 dstOffsetBytes, Int32 byteCount) 
    at System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count) 
    at System.IO.TextWriter.WriteLine(String value) 
    at System.IO.TextWriter.WriteLine(String format, Object arg0) 
    at System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0) 
    at SubSonic.DataProviders.DbDataProvider.ExecuteReader(QueryCommand qry) in C:\[path]\SubSonic.Core\DataProviders\DbDataProvider.cs:line 112 
    at SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand`1 query, Object[] paramValues) in C:\[path]\SubSonic.Core\Linq\Structure\DbQueryProvider.cs:line 280 
    at lambda_method(Closure) 
    at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression) in C:\[path]\SubSonic.Core\Linq\Structure\DbQueryProvider.cs:line 131 
    at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) in C:\[path]\SubSonic.Core\Linq\Structure\QueryProvider.cs:line 50 
    at SubSonic.Linq.Structure.Query`1.GetEnumerator() in C:\[path]\SubSonic.Core\Linq\Structure\Query.cs:line 85 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at [namespace].ReportManager.GetAllPending() in [path]\ReportManager.cs:line 193 
    at [namespace].ReportsServiceHandler.Run() in C:\[path]\ReportsServiceHandler.cs:line 137 

: 그들은 모두 하루나 이틀 동안 잘 실행되지만 데이터베이스에 새 연결이 때 아음속 시작 후 예외를 제공하기 위해, 모든 예외가 simillar 있으며, 단지 데이터베이스 작업을 변경, exemple있다 지금까지 내가 가지고있는 유일한 해결책은 서비스를 재설정하는 것이지만 아직까지이를 일으킬 수있는 것을 발견하지 못했습니다. 로컬 환경에서 디버깅을 시도했지만 수행 할 수 없었습니다.

아음속에 버그가 있는지 누구에게 알리거나 서비스에서 문제를 어떻게 찾을 수 있습니까?

도움을 위해 미리 감사드립니다.

답변

0
당신에게 독자를 반환 subsonics3

, 당신은 사용 방법

Query qry = Product.CreateQuery().WHERE("ListPrice > 50.00") 
      .AND("Class = L").AND("Color = Yellow"); 
using(IDataReader rdr = qry.ExecuteReader()) 
{ 
while (rdr.Read()) { 
    Console.WriteLine(rdr[Product.Columns.Name].ToString()); 
} 
} 

다음을 처리 할 수 ​​있습니다 (SqlDataReader 개체 리더 = command.ExecuteReader()) { ... 할 물건 ... }


using을 사용하여 연결을 올바르게 처리해야한다고 생각합니다. 이전에 사용했던 연결이 계속 열려있을 수 있습니다. 즉, 닫히지 않았기 때문일 수 있습니다.

using(var connection = new Connection()) 
{ 
} 

위 코드를 처분하십시오. 아니면 거기에 없다면 나는 Dispose Pattern을 사용하고 그것을 사용하고 나서 conneciton 객체를 처분 할 것을 제안한다.

+0

문제가 exemple 들면, 연결이 음속에 의해 제조된다는 것이다 : 리턴 Repository.Single (X => x.CompanyID == 조직 && x.ServiceID == 서비스); JoãoSilva @ –

+0

이 -이 사용 (SqlDataReader 개체 리더 = command.ExecuteReader처럼 할 수 - 그럼 난 당신이 ... JoãoSilva @ –

+0

을 생성 객체를 장악하고 난 당신이 연결을 처리하는 방법을 현재 라이브러리에없는 확신하기 때문에 그것을 처리 할 수 ​​있다고 생각()) { ... 당신의 물건을 ... } –