Welcome to Windows Workflow Foundation (WF)
Top Tasks :

WF Community Bloggers

WF Designer caching invalid XOML?

While updating my MSMQ Activities for Windows Workflow Foundation, I ran into a strange issue with the WF designer when working with XOML-based workflows. The problem I was trying to solve was something like the following: The MsmqReceiveActivity had an attached dependency property called Label, as well as a regular .NET property around it. In code based workflows, that worked just fine. However, when designing XOML based workflows, it appeared to worked fine as well, but as soon as you closed the designer and tried opening the workflow again you'd get an error saying that the activity class needed to implement static GetLabel() and SetLabel() accessors. This was funky because the activity actually had those! Looking at the generated XOML code, it was doing something like this: < ns0:MsmqReceiveActivity x:Name = " ReceiveMessage " Queue = " {ActivityBind SampleWorkflow2,Path=QUEUE} " ns0:MsmqReceiveActivity.Label = " {ActivityBind SampleWorkflow2,Path=_labelReceived} " MessageType = " {x:Type TestApp.Customer} " Label = " {x:Null} " > < ns0:MsmqReceiveActivity.MessageReceived > < ActivityBind Name = " SampleWorkflow2 " Path = " _customerReceived " /> </ ns0:MsmqReceiveActivity.MessageReceived > </ ns0:MsmqReceiveActivity > Looking closely I finally discovered the issue: The problem was that the Label property was getting serialized twice! One was the attached dependency property itself (with the ActivityBind), the other was the normal .NET property! Knowing that, it was easy to fix, by just telling the designer not to serialize the regular .NET property: > [ SRDescription ( "Recv_Label" )] [ Category ( "Activity" )] [ ValidationOption ( ValidationOption .Optional)] [ DesignerSerializationVisibility ( DesignerSerializationVisibility .Hidden)] public string Label { get { return ( string ) base .GetValue(LabelProperty); } set { base .SetValue(LabelProperty, value ); } } Testing all of this is when I realized that everytime my activity serialized incorrectly in the XOML designer, and I caused the designer error when opening again, the designer would get "stuck" with the invalid XOML apparently getting it cached somewhere. Even if I manually went into the .xoml file and deleted the entire invalid block of code (completely removing the MsmqReceiveActivity instance), as soon as I opened the file again it would use the original, invalid XOML code. I actually had to close and restart Visual Studio to be able to fix the code. So, if this happens to you, restarting Visual Studio seems to do the trick. That said, I do wonder whether this "caching" going on was intentional or if it's a problem with the designer... > Read More...
Published Friday, August 25, 2006 10:01 AM by Commonality
Filed under:
Anonymous comments are disabled

<August 2006>
SuMoTuWeThFrSa
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

Copyright © 2006 Microsoft Corporation. All Rights Reserved. | Terms of Use | Privacy Statement | Contact Us