Operațiunea de așteptare a expirat Win32Exception (0x80004005): Operațiunea de așteptare a expirat azure (Programare, Sql, Azure Sql Database, Azure Vpn)

etech shaw a intrebat.

Următoarea eroare apare atunci când se recuperează o cantitate mare de date din sql azure. Am implementat deja Transient Fault Handling, dar tot primesc această eroare

Descriere: O excepție netransmisă a apărut în timpul executării cererii web curente. Vă rugăm să examinați urmărirea stivei pentru mai multe informații despre eroare și despre locul în care aceasta a apărut în cod.

Detalii despre excepție: System.ComponentModel.Win32Exception: Operațiunea de așteptare a expirat

Eroare sursă:

O excepție netransmisă a fost generată în timpul executării cererii web curente. Informațiile referitoare la originea și locația excepției pot fi identificate cu ajutorul urmăririi stivei de excepții de mai jos.

Stack Trace:

[Win32Exception (0x80004005): Operațiunea de așteptare a ieșit din timp].

[SqlException (0x80131904): Timpul de așteptare a expirat. Perioada de timeout s-a scurs înainte de finalizarea operațiunii sau serverul nu răspunde]. System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) +1789270
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) +5340622 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244 System.Data.SqlClient.TdsParser.TdsParser. TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1691 System.Data.SqlClient.SqlCommand. FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +275 System.Data.SqlClient.SqlCommand. RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +1421 System. Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +208 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +163 System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(SqlCommand cmd, Boolean ignoreInsertPKException, String id) +98

[HttpException (0x80004005): Nu se poate conecta la baza de date a sesiunii SQL Server]. System.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection conn, Exception e) +235 System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(SqlCommand cmd, Boolean ignoreInsertPKException, String id) +390 System.Web.SessionState.SqlSessionStateStore.SqlSessionStateStore. SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +589 System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +565 System. Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

Informații privind versiunea: Microsoft .NET Framework Versiunea:4.0.30319; ASP.NET Versiunea:4.0.30319.34009

http://i.stack.imgur.com/8BloW.png

2 răspunsuri
Andreas

Obiectul SqlClient.SqlCommand are o proprietate CommandTimeout. Valoarea sa implicită este 30 (secunde). Ar trebui să o setezi la o valoare mai mare.

Gaspare Bonventre

Puteți seta o valoare mai mare a timeout-ului sau puteți dezactiva valoarea timeout-ului, așa cum am făcut eu în codul de mai jos. Rețineți că este posibil să întâmpinați erori dacă obiectul care conține datele depășește 2Gb. Poate doriți să luați în considerare reproiectarea interogării dvs. pentru a lua bucăți mai mici de date la un moment dat.

// I'm populating an ADO.Net DataTable for this demo but populate whatever object you'd like
DataTable DtFromSQL = new DataTable();
SqlConnection myConnection = new SqlConnection("ConnectionString");
myConnection.Open();
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("enter some SQL query here", myConnection);
// A CommandTimeout Value of 0 turns the timout off, otherwise you can set it to some value in seconds
myCommand.CommandTimeout = 0;  
myReader = myCommand.ExecuteReader();
DtFromSQL.Load(myReader8);
myConnection.Close();
DtFromSQL;