Search code examples
biztalkbiztalk-2013

Change a functiod value without redeploying orchestration?


I have a simply value mapping functoid with a hard-coded string value in a Biztalk Transform which I need to change. I'd rather not re-deploy and regression test an entire orchestration just for this one value. Is there any way to change this on production without re-deploying the orchestration?


Solution

    1. BizTalk best practices here dictate that different artifact types should be in different projects. This allows you to deploy just the Maps assembly, like so (after unenlisting any orchestration that uses maps directly):

      btstask AddResource /A:<ApplicationName> /T:System.BizTalk:BizTalkAssembly /Ov /So:Maps.dll /Op:GacOnAdd,GacOnImport,GacOnInstall
      
    2. When possible, put transforms on ports rather than in orchestrations. This helps alleviate the problem of having to unenlist orchestrations, and should perform better, but isn't always practical (sometimes an orchestration needs to decide which map, or use multiple maps, or ...). In a case like that, you can redeploy the maps assembly and restart your host instances without redeploying orchestrations.

    3. Avoid hard coded values in maps and orchestrations. Point them to a static variable in a static C# utility class. The C# assembly can be redeployed without redeploying a map or orchestration (just GAC the C# assembly and restart your host instance). The C# assembly can also be directed to point to some other storage, such as SSO, a database, a WCF/Web service, etc.