2013-01-20 4 views
0

4 시간마다 SQL Server 데이터베이스에 4D 데이터베이스 (v12)의 데이터를 복사하는 .Net Windows 서비스를 작성했습니다. Windows 7 32 비트에서 실행 중이며 로컬 시스템으로 실행 중입니다. 4D ODBC 드라이버 버전 12.02를 사용하고 있습니다.Windows에서 ODBC 연결이 두 번째 연결 시도에서 실패 함

첫 번째 서비스가 실행되면 모든 것이 정상적으로 작동합니다. 두 번째 실행에 SQL 서버에 대한 연결이 여전히 작동하지만, 4D로 ODBC 연결은 다음과 같은 오류를 가져옵니다

System.Data.Odbc.OdbcException (0x80131937): ERROR [08001] Client unable to establish connection: Is the SQL Se at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle) at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.Odbc.OdbcConnection.Open() at DataWarehouseLoader.DAL.DWGenerator.Run() at DataWarehouseSvc.DataWarehouseSvc.OnTimerElapsed(Object sender, ElapsedEventArgs e)

코드는 각 실행 후 SQL Server 및 4D 모두에 대한 연결을 처리 할 조심 다음과 같은 방법으로 :

일단 오류가 발생하면 서비스를 중지하거나 시작할 때까지 ODBC 연결이 다시 작동하지 않습니다. 이렇게하면 한 번에 다시 작동 할 수 있습니다. 시스템 DSN뿐만 아니라 DSN없는 연결로 연결을 시도했지만 결과는 같습니다. 서비스가 더 자주 실행되면 10 분에 한 번씩 말하면 두 번 이상 작동하지만 충분한 시간이 지나면 작동하지 않아야합니다.

나는이 문제에 대해 매우 혼란 스럽다. 나는 어떤 도움이나 제안을 시도해 주셔서 감사드립니다.

답변

0

잘못된 것을 찾을 수 없었습니다. 나는 이것이 4D ODBC 드라이버의 버그라고 생각한다. 내 해결 방법은 4D 부분을 처리 할 별도의 콘솔 앱을 만드는 것입니다.

필요한 경우이 콘솔 앱을 서비스에서 새 프로세스로 시작할 수 있습니다. 이렇게하면 4D에 연결된 콘솔 앱이 메모리에서 언로드되지만 서비스는 계속 실행될 수 있습니다.

메모리에서 프로그램을 언로드하면 연결 문제가 w/4D인지 여부를 정리하고 후속 실행을 계속할 수 있습니다.

관련 문제