2014-02-12 3 views
4

у меня есть проблемы со следующим исключением:Transaction Timeout

Сделка, связанная с текущим подключением завершила , но не была удалена. Транзакция должна быть удалена до того, как соединение может использоваться для выполнения операторов SQL.

«Вызов» с базой данных занимает 10m 53s (испытано без операции и преуспели) и сделки он бросает исключение после 10м. Поэтому я уверен, что это не тот код, который создает проблему, но предел тайм-аута транзакции.

Я видел, что многие люди боролись с этой проблемой, но я пробовал все возможные решения, которые я нашел, но до сих пор не добился успеха, чтобы избавиться от этого исключения.

После кода я использую:

[...] 
TransactionOptions transactionOptions = new TransactionOptions(); 
transactionOptions.IsolationLevel = IsolationLevel.Snapshot; 
transactionOptions.Timeout = new TimeSpan(0, 0, 30, 0, 0); 

using(var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions)) 
{ 
    foreach (var selector in GetDataContext().sp_GetChangedSelectors(changeSet)) 
    { 
      // xml-result will be stored in a file 
    } 

    // multiple other SP calls the same way 

    scope.Complete(); 
} 

Я добавил заявление

<system.transactions> 
    <machineSettings maxTimeout="02:00:00"/> 
</system.transactions> 

к machine.config в % WINDIR% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config на обеих машинах (локальная и SQL-серверная машина).

У меня заканчиваются идеи, что я мог бы попробовать дальше. Какие-либо предложения?

ответ

1

Просто дикое предположение: вы используете 32-битную аппликацию? Тогда это может быть неправильный machine.config!

% WINDIR% \ Microsoft.NET \ Framework \ v4.0.30319

в противном случае я бы проверить, если это значение коррекции в web.config или app.config

+0

Я дам ему попробовать – Viper

+0

@Viper, который вы должны увидеть в диспетчере задач на вкладке «процессы», если приложение 32 бит (имя exe имеет добавленный _ * 32_) – toATwork

+0

Nice. Thats it =) Большое спасибо вам. Не думайте о 32 и 64-битных проблемах. – Viper

1

Убедитесь, что вы изменили право machine.config файл.

В зависимости от того, как вы скомпилировали приложение (AnyCPU/x64/x86, «предпочитаете 32-разрядный»), используются machine.config (Framework vs Framework64).

Также убедитесь, что вы перезагрузили машину после изменения machine.config.

+0

Спасибо вам тоже. Но «toAtwork» был вторым быстрее :) – Viper

+0

@Viper вы могли бы обогнать обоих участников, хотя;) – toATwork