Monday, October 27, 2014

Tip: Dynamically updating workflow service

Recently I have come across the need to create a tool to update workflow service dynamically using the .NET FW 4.5 new Dynamic Update feature. I have spent few days looking into how I can do it with Workflow Service. However, it turned out to be a failure because the method I used is only suitable for app host type of workflow. At the edge of disappointment, I found this useful web sample provided by the Microsoft sample web site. It's a tutorial on how I can do side-by-side versioning and dynamic update to a workflow service. It's a perfect example showing how we can insert the update map into the workflow service (which is something different from the console app host method) and finally show how we can update running instances of the workflow service using the scarcely documented API WorkflowUpdateableControlClient.

WF4.5 Developer Preview - C# Expression, Workflow Versioning and Dynamic Update

Wednesday, May 14, 2014

Tip: Bootstrap 3.1.1 "dropdown-submenu" Workaround

The new bootstrap navbar does not support more than 2 levels of menu. That is to say the "dropdown-submenu" css class has been removed since Bootstrap 3.0. In order to work around that issue one can add the missing piece into another css file.

Menu HTML Notice how the css class "dropdown-submenu" is used in the HTML snippet.

Menu CSS
Notice how the CSS is put in place. In certain scenario for example when we use a centered navbar, the "!important" command is important to override the Bootstrap original behavior for the third level menu to appear correctly.

Tuesday, May 6, 2014

Tip: Workflow Serialization Issue

In Windows Workflow 4.5, serialization of a long running process saves the workflow states (variables' value) and some other information into the database. However it's important to consider carefully the type of objects that the workflow can save. object such as EntitySet and EttityRef of LINQ2SQL by default do not support serialization into database. When try to save such objects into the database, error will be thrown by the workflow runtime:

Operation 'OperationName|IServiceContract' on service instance with identifier '899be275-01f7-45c7-a8d2-ee89595522cb' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.

then

System.Runtime.Serialization.InvalidDataContractException: Type 'System.Data.Linq.EntitySet`1[WhateverObjectType]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute.

See the Microsoft .NET Framework documentation for other supported types. Microsoft does describe some of the thing about LINQ2SQL serialization at Serialization [LINQ to SQL]

We tend to pass in the LINQ2SQL object into the workflow, so one way to workaround the problem is to nullify the object before the WF goes into idle mode. Use the object as a parameter passing vehicle instead of using it to store workflow state.

Tuesday, April 22, 2014

Tip: How to embed different font files for different browser?

Scenario:
Many times you want to embed the necessary font files for the exact browsers that you want to target in order to save internet bandwidth and to improve web site performance. For example, Google Chrome uses the *.svg file to render the best quality of text but other browsers might not support that font file, so you might as well instruct the browser downloads only that font file rather than downloading everyting.

Solution:
Create several css files (i.e.browser specific) that contain the font files declaration. Determine the font file to use at the server or web site host. Here's an example using the ASP.NET MVC:


Friday, April 11, 2014

Tip: Embed open type font (otf) with CSS.

Recently got some font files from the web designer and those files are in otf format. When i tried to embed the font files into CSS i receive the following error from IE10:

         CSS3114: @font-face failed OpenType embedding permission check. Permission must be Installable.

As far i have gathered some information from Google, I need to convert the format to true type (ttf) font. I used the web site http://everythingfonts.com/otf-to-ttf to convert the font files and use the "embed" program from http://carnage-melon.tom7.org/embed/ to change the embed level of the font files so that IE can use them. I used VS2012 to do the code compilation because the original embed.exe does not work on my 64 bit machine.

 Attached here the working program. https://drive.google.com/file/d/0B0QLqsRA_p4pYWhtV2c2Z1FnaWs/edit?usp=sharing

Monday, February 10, 2014

Tip: Controller method attributed with "ClaimsAuthorize" triggers the "ClaimsAuthorizationManager" "CheckAccess" method twice.

If you use the Thinktecture Identity Model framework, most probably you will use the "ClaimsAuthorize" attribute for your methods in a MVC controller class. If you put a break point in your custom authorization manager, you will notice that methods that have the "ClaimsAuthorize" attribute will get called twice. One time for the default Action/Resource and the second for the custom Action/Resource that you have specified in the attribute. The reason for this is that you have registered the "ClaimsAuthorizeAttribute" in the FilterConfig class: and you have instrumented your controller method: The FilterConfig setup is used when we want the WIF framework to trigger the "CheckAccess" for each and every Controller methods in our MVC project. As for the "ClaimsAuthorize" attribute, only methods that are instrumented with it will trigger the "CheckAccess", if the global filter is not set.