2015-04-22 2 views
2

Если System.Management.Automation.Runspaces.Runspace.Open() находится внутри System.Transactions.TransactionScope, это, по-видимому, изменяет Transaction.Current, что в свою очередь вызывает «Исключение System.InvalidOperationException» во время удаления транзакции.Вызов Runspace.Open() внутри TransactionScope изменяет событие Transaction.Current и throws

Так что:

using (var scope = new TransactionScope()) 
{ 
    using (var runspace = RunspaceFactory.CreateRunspace()) 
    { 
     runspace.Open(); 
    } 

    scope.Complete(); 
} 

Броски: "Transaction.Current изменилось внутри TransactionScope."

Мне было интересно, не хватает ли у меня какого-либо важного параметра в транзакции или в Runspace или что-то связано с моей конфигурацией power-shell/MSDTC/etc?

+0

Got same problem. Вы решили это? – SimonGoldstone

+1

Нет, мне пришлось перепроектировать мой код. –

ответ

2

У меня такая же проблема. Мой Runspace похоронен в нескольких вложенных слоях TransactionScope. После выполнения Runspace.Open(), Transaction.Current изменяется и Исключение выбрасывается в соответствии с вопросом OP.

Решение для меня заключалось в том, чтобы обернуть код внутри другого TransactionScope, но на этот раз с параметром TransactionScopeOption.Suppress.

using (var transactionScope = new TransactionScope(TransactionScopeOption.Suppress)) 
     { 
      IEnumerable<Object> results = null; 

      using (Runspace runSpace = RunspaceFactory.CreateRunspace()) 
      { 
       runSpace.Open(); 

       using (Pipeline pipeline = runSpace.CreatePipeline()) 
       { 
        Command command = new Command(script, true, true); 

        if (parameters != null && parameters.Any()) 
         foreach (var param in parameters) 
          command.Parameters.Add(param.Key, param.Value); 

        pipeline.Commands.Add(command); 

        results = pipeline.Invoke(); 
       } 

       runSpace.Close(); 

       transactionScope.Complete(); 

       return results; 
      } 
     } 

Это прекрасно работает для меня. Больше никаких исключений.

Смежные вопросы