Я использую .NET Framework 4.0, C # и SQL Server 2008 R2 в Windows Server 2008 R2.Мой контекст данных LINQ to SQL находится в отдельной библиотеке, а соответствующий код выполняется в службе Windows.
У меня есть хорошо протестированная, критически важная хранимая процедура, которая принимает около 19 параметров (я знаю, что язнать), выполняет некоторую простую логику «если», строит несколько переменных и вставляет данные в 3 таблицы.Он не использует курсоры или временные таблицы.Я описал, что делает SP, поскольку я не вправе публиковать код sql.
Я вижу много сообщений в Интернете о SqlException из-за тайм-аута команды, и ответы редко выходят за рамкиmsgstr "увеличить время ожидания команды". Пример
Я получил вышеупомянутое исключение, поэтому попытался увеличить время ожидания команды при создании контекста данных до 10 минут .Я все еще получаю исключение после того, как он сидел там в ожидании этих 10 минут.Затем я добавил журналы отладки для захвата вывода из LINQ to SQL и запустил SP в SQL Server Management studio с теми же значениями параметров.Он успешно завершился за долю секунды .
Вот вывод LINQ to SQL Log (с таймаутами по умолчанию), смешанный с некоторыми другими выводами журнала, я запутал SPимя в этом сообщении:
16:01:37 15269 Irrelevant log line, deleted for StackOverflow
EXEC @RETURN_VALUE = [dbo].[NAMEHIDDENONSTACKOVERFLOW] @Eastings = @p0, @Northings = @p1, @Speed = @p2, @UpdateDate = @p3, @UserId = @p4, @Postion = @p5, @Direction = @p6, @VehicleId = @p7, @Status = @p8, @Confidence = @p9, @Latitude = @p10, @Longitude = @p11, @PosLatitude = @p12, @PosLongitude = @p13, @WatchBoxId = @p14, @LastWatchBoxId = @p15, @WatchBoxIdAlert = @p16, @ImbolizationState = @p17, @TowAwayAlertState = @p18
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [560120]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [5754714]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [0]
-- @p3: Input DateTime (Size = -1; Prec = 0; Scale = 0) [02/08/2011 20:45:08]
-- @p4: Input Int (Size = -1; Prec = 0; Scale = 0) [11]
-- @p5: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [Swindon United Kingdom]
-- @p6: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [5]
-- @p7: Input Int (Size = -1; Prec = 0; Scale = 0) [15269]
-- @p8: Input Int (Size = -1; Prec = 0; Scale = 0) [901]
-- @p9: Input Int (Size = -1; Prec = 0; Scale = 0) [0]
-- @p10: Input Float (Size = -1; Prec = 0; Scale = 0) [51.939899]
-- @p11: Input Float (Size = -1; Prec = 0; Scale = 0) [-2.125414]
-- @p12: Input Float (Size = -1; Prec = 0; Scale = 0) [51.9333333]
-- @p13: Input Float (Size = -1; Prec = 0; Scale = 0) [-2.1]
-- @p14: Input Int (Size = -1; Prec = 0; Scale = 0) [-1]
-- @p15: Input Int (Size = -1; Prec = 0; Scale = 0) [-1]
-- @p16: Input Int (Size = -1; Prec = 0; Scale = 0) [0]
-- @p17: Input Int (Size = -1; Prec = 0; Scale = 0) [0]
-- @p18: Input Int (Size = -1; Prec = 0; Scale = 0) [0]
-- @RETURN_VALUE: Output Int (Size = -1; Prec = 0; Scale = 0) [Null]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
16:02:23 0 Error in DoPoll 1 Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Единственная подсказка, которую я получаю при поиске переполнения стека, заключается в том, что может быть проблема с чем-то, называемым «прослушивание параметров», но я все еще читаю эторазберись, о чем идет речь.
Это действительно критически важно, и я получу много хлопот, если он выйдет из строя, поэтому я испытываю желание откатить LINQ и вернуться к vanilla ADO.Мой вопрос: есть ли что-то не так с моим подходом (иначе говоря: я идиот?) Или есть какая-то проблема или ошибка в LINQ to SQL, которая может вызывать эту проблему?Есть ли что-нибудь, что я могу сделать, чтобы устранить это, или лучше вернуться к ванильному ADO?