Tôi thấy điều này trên hệ thống sân khấu của chúng tôi, sau khi nó đã được lên đến 2-3 ngày.Định kỳ không hợp lệCastException và "Máy chủ không thể tiếp tục giao dịch" với LINQ
"Máy chủ không thể tiếp tục giao dịch. MÔ TẢ: 39000000ef". (với desc: xxx tăng mỗi lần).
Các vết đống lãm
System.Data.SqlClient.SqlException: The server failed to resume the transaction. Desc:39000000ef.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at ...
Sau đó đã xảy ra toàn bộ máy chủ đi vào quái. Dường như siêu dữ liệu không còn được biểu diễn chính xác trong bộ nhớ nữa, bởi vì tôi thấy nhiều InvalidCastExceptions sau đó. Tôi đoán điều này là do hệ thống cố gắng deserialize một chuỗi vào một trường int vì siêu dữ liệu được bù đắp không chính xác.
ví dụ:
System.InvalidCastException: Specified cast is not valid.
at System.Data.SqlClient.SqlBuffer.get_Int32()
at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)
at Read_Order(ObjectMaterializer`1)
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
này có ý nghĩa gì?
Tôi khá chắc chắn cơ sở dữ liệu không được cập nhật phía sau hệ thống và cơ sở dữ liệu đã trực tuyến toàn bộ thời gian.
Sự cố vẫn tiếp diễn từ đây trở đi, cho đến khi máy chủ khởi động lại, sau đó mọi thứ hoạt động tốt.
Tôi có cần phải có mã để thiết lập lại kết nối cơ sở dữ liệu nếu không thành công không? Khung không tự xử lý nó?
Tôi đang sử dụng SQL Server 2008, IIS 6, và Net 3.5SP1
UPDATE: Cấu trúc mã không một cái gì đó như thế này:
var dc = new datacontext()
IList<someobject> objs = dc.GetAllItemsToProcess()
var dc2 = new datacontext();
foreach(var o in objs) {
try {
var o2 = dc2.someobjects.SingleOrDefault(x=>x.id = o.id);
// do stuff to o2
dc2.save();
} catch() {
// something failed so restart datacontext()
dc2 = new datacontext();
}
}
Máy chủ nào được khởi động lại? Máy chủ SQL hoặc máy chủ web? – Rap
Máy chủ web; hoặc thực sự chỉ là ứng dụng. – Soraz
Chúng tôi có cùng một vấn đề - ứng dụng bị treo theo thời gian và vẫn bị lỗi cho đến khi được khởi động lại. Các ngoại lệ tương tự "Máy chủ không thể tiếp tục giao dịch" và InvalidCastExceptions được ném. Điều thú vị là một ví dụ khác của cùng một ứng dụng chạy trơn tru. Ngoài việc sử dụng hai (có thể can thiệp) datacontext nó có thể có một cái gì đó để làm với phương pháp instant instant datacontext trong container IoC. Tôi không thể tìm thấy sự cố về sự cố cho đến nay, vì vậy mọi cập nhật về tiến trình của bạn sẽ được đánh giá cao! – PanJanek