What Was I Thinking?

Follies & Foils of .NET Development

  Home  |   Contact  |   Syndication    |   Login
  41 Posts | 0 Stories | 97 Comments | 0 Trackbacks

News

Archives

Post Categories

Check These Out

Gurus

Recently I migrated one of my solutions from .net 3.0 to .net 3.5.  For the most part the migration went smoothly, except for an issue with the type provider, and XAML activated workflows that included accompanying .rules files.

I was able to load and work with the workflows in the Visual Studio designer, but they would fail execution at runtime:

line 402
error 1342: Activity 'PersistWasSucessful' validation failed: Can not find the condition "ParticipationSaved". --->  System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException: The workflow failed validation..


Typically the "Condition Not Found" error is the result of the .rules file not being loaded at the same time as the workflow. Since I hadn't changed my workflow loading codebase, It seemed an unlikely candidate.

The problem had nothing to do with the Workflow Runtime, but rather a change in how the Rules Files are stored as embedded resources. Thank You "Lutz Roeder's Reflector"!

In .NET 3.0, a XAML WF with a rules file called MyWorkflow in the WorkflowLibrary assembly would have the following resource names:

     WorkflowLibrary.MyWorkflow.xoml
    WorkflowLibrary.MyWorkflow.rules.rules
 

*note the duplication of the .rules suffix on the resource name *

in .NET 3.5 the same workflow has the following resource names:

WorkflowLIbrary.MyWorkflow.xoml
MyWorkflow.rules

So 2 things have changed here; the duplication of the .rules suffix (a likely bug that was fixed) is no longer present, and the rules file is saved without the namespace.
 

After changing my WF hosting logic to extract the rules file using the new naming convention, the rules are once again getting loaded into my runtime and workflows are executing.

posted on Wednesday, December 12, 2007 8:29 AM

Feedback

# re: Workflow Validation Exception: Condition Not Found 1/30/2008 5:56 AM nadine
Hi,

great post!
But what did you change to reload the Workflow Rules???

I have a similiar problem after upgrading to VS2008 but only with one Activity.

# re: Workflow Validation Exception: Condition Not Found 5/12/2008 10:44 AM Blackberry 9000 Review
Another great tip. THank you!

# re: Workflow Validation Exception: Condition Not Found 5/24/2008 1:48 PM wtfChris
I read the rules XAML from my resource files (from the resource file into a stream object, from the stream object into the xmlTextReader.

When I load the workflow into the runtime, I use the overload that takes xmltextreaders for the workflow and rule defintions.

The code for loading the workflow and rules into the runtime is:
wfInstance = runtime.CreateWorkflow(rdrWorkflow, rdrRules, null);


# re: Workflow Validation Exception: Condition Not Found 7/31/2008 5:39 PM CoderX
I'm getting this error as well, and I can't find a fix for it. The project was created in .NET 3.5 from the get-go, and a nearly identical test project works fine. If I remove all use of Declarative rules from the workflow it runs fine, but the moment I use even one DR it dies with a validation error on instantiation. I do not have my WF seperated out into a XOML file, so using the xmltextreaders overload is not possible. My basic project structure is a WCF web-service (hosted in a web-app project), that references the Workflow project. I am losing hair and have to show this working next Friday. I know this should work, as my test project does, but this one just refuses to. Any ideas?

# re: Workflow Validation Exception: Condition Not Found 9/11/2008 7:24 AM Amiram
This error happened to me with a new 3.5 project. I got the error when the app run, and when I tried to change the rule I got "Value does not fall whitin the expected range".
The problem was that the rules file was with lowercase letter, like myworkflow1.rules, but the cs and xoml file were like MyWorkflow.
To fix that:
1. unload the project (RightClick->Unload)
2. change the file name from windows explorer.
3. Open your csproj file with notepad and change the file name where ever you find it.
4. Reload the project.

# re: Workflow Validation Exception: Condition Not Found 2/20/2009 12:50 AM yasirj
Open the .csproj file in Notepad
Find the section where the .rules file is referenced. It will look something like this:
<EmbeddedResource Include="MyWorkflow.rules" />
Alter this tag to include the DependentUpon tag:
<EmbeddedResource Include="MyWorkflow.rules" >
<DependentUpon>TheWorkflow.cs</DependentUpon>
</EmbeddedResource>
Save the .csproj file
Recompile the solution

# re: Workflow Validation Exception: Condition Not Found 5/25/2009 12:13 AM LE
Well, turns out naming IS the issue. I had only gone part way. For a workflow to work correctly with rules it must be named the exact same name as the class.

# re: Workflow Validation Exception: Condition Not Found 10/18/2009 5:24 AM spjack
I had a similar issue. The workflow failed to start on adding declarative rules condition. Though the .rules reference and its dependency on .cs file existed in the project file the workflow failed to start. It turned out to be an issue with the naming of the .rules file. It needs to be exactly same as the class name (not the .cs file name) Thanks to the last solution provider here.

# re: Workflow Validation Exception: Condition Not Found 11/16/2009 3:46 AM Malik
my code in .csproj already like this:

<ItemGroup>
<EmbeddedResource Include="Workflow1.rules">
<DependentUpon>Workflow1.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>

when I try to re-deploy it still not successed..
Please help.>!!

Post A Comment
Title:
Name:
Email:
Website:
Comment:
Verification: