version: 2025.10.4.4173
I was trying to run AS:LookupValue very frequently (500x from one transformation (from the template called many times from apply-templates) and run 2 transformation per second in average) on a server with high load
I was expecting to everything runs smoothly.
Instead I’ve got System.InvalidOperationException: Collection was modified; enumeration operation may not execute with a random occurrence
The addition of so many lookuplist calls was not optimal, it was a mistake. However, it was good simulation of many calls to a very simple AS:LookupList causing many simple and duplicate SQL calls. The problem was with a random occurrence apporx. several times per minute. The problem came from the AbstractSqlService Profiler class.
2026-03-17 19:12:59,927 [53] ERROR Origam.Workflow.WorkflowEngine - Collection was modified; enumeration operation may not execute.
Workflow stack trace
Step: *****
...
...
...
Origam.OrigamException: Collection was modified; enumeration operation may not execute.
---> System.Exception: Collection was modified; enumeration operation may not execute.
---> System.Exception: Transformation result invalid.
---> System.Xml.Xsl.XslTransformException: An error occurred during a call to extension function 'LookupList'. See InnerException for a complete description of the error. ---> System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at Origam.DA.Service.Profiler.LogRememberedExecutionTimes() in D:\a\1\s\backend\Origam.DA.Service\AbstractSqlDataService.cs:line 3170
at Origam.Workflow.DataServiceAgent.LoadData(DataStructureQuery query, DataSet data) in D:\a\1\s\backend\Origam.Workflow\Service Agents\DataServiceAgent.cs:line 101
at Origam.Workflow.DataServiceAgent.Run() in D:\a\1\s\backend\Origam.Workflow\Service Agents\DataServiceAgent.cs:line 631
at Origam.Workbench.Services.DataLookupService.GetList(Guid lookupId, Dictionary`2 parameters, String transactionId) in D:\a\1\s\backend\Origam.Workbench.Services\DataLookupService.cs:line 107
at Origam.Rule.XsltFunctions.LegacyXsltFunctionContainer.LookupList(String lookupId, Dictionary`2 parameters) in D:\a\1\s\backend\Origam.Rule\XsltFunctions\LegacyXsltFunctionContainer.cs:line 645
at InvokeStub_LegacyXsltFunctionContainer.LookupList(Object, Span`1)
at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
--- End of inner exception stack trace ---
at System.Xml.Xsl.Runtime.XmlExtensionFunction.Invoke(Object extObj, Object[] args)
at System.Xml.Xsl.Runtime.XmlQueryContext.InvokeXsltLateBoundFunction(String name, String namespaceUri, IList`1[] args)
at <xsl:template match="*****">(XmlQueryRuntime, XPathNavigator, IList`1, IList`1)
at <xsl:template match="ROOT">(XmlQueryRuntime, XPathNavigator)
at <xsl:apply-templates>(XmlQueryRuntime, XPathNavigator)
at Root(XmlQueryRuntime)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, Stream results)
at Origam.Rule.Xslt.CompiledXsltEngine.Transform(Object engine, XsltArgumentList xslArg, XPathDocument sourceXpathDoc, IXmlContainer resultDoc) in D:\a\1\s\backend\Origam.Rule\Xslt\CompiledXsltEngine.cs:line 72
at Origam.Rule.Xslt.MicrosoftXsltEngine.Transform(IXmlContainer data, Object xsltEngine, Hashtable parameters, String transactionId, IDataStructure outputStructure, Boolean validateOnly) in D:\a\1\s\backend\Origam.Rule\Xslt\MicrosoftXsltEngine.cs:line 213
--- End of inner exception stack trace ---
at Origam.Rule.Xslt.MicrosoftXsltEngine.Transform(IXmlContainer data, Object xsltEngine, Hashtable parameters, String transactionId, IDataStructure outputStructure, Boolean validateOnly) in D:\a\1\s\backend\Origam.Rule\Xslt\MicrosoftXsltEngine.cs:line 257
--- End of inner exception stack trace ---
at Origam.Rule.Xslt.MicrosoftXsltEngine.Transform(IXmlContainer data, Object xsltEngine, Hashtable parameters, String transactionId, IDataStructure outputStructure, Boolean validateOnly) in D:\a\1\s\backend\Origam.Rule\Xslt\MicrosoftXsltEngine.cs:line 333
at Origam.Rule.Xslt.AbstractXsltEngine.Transform(IXmlContainer data, Guid transformationId, Guid retransformationId, Hashtable parameters, String transactionId, Hashtable retransformationParameters, IDataStructure outputStructure, Boolean validateOnly) in D:\a\1\s\backend\Origam.Rule\Xslt\AbstractXsltEngine.cs:line 179
at Origam.Rule.Xslt.AbstractXsltEngine.Transform(IXmlContainer data, Guid transformationId, Hashtable parameters, String transactionId, IDataStructure outputStructure, Boolean validateOnly) in D:\a\1\s\backend\Origam.Rule\Xslt\AbstractXsltEngine.cs:line 104
at Origam.Workflow.TransformationAgent.Run() in D:\a\1\s\backend\Origam.Workflow\Service Agents\TransformationAgent.cs:line 68
at Origam.Workflow.Tasks.ServiceMethodCallEngineTask.OnExecute() in D:\a\1\s\backend\Origam.Workflow\Tasks\ServiceMethodCallEngineTask.cs:line 230
at Origam.Workflow.Tasks.ServiceMethodCallEngineTask.Execute() in D:\a\1\s\backend\Origam.Workflow\Tasks\ServiceMethodCallEngineTask.cs:line 73
--- End of inner exception stack trace ---