Creating public orchestrations

I am currently working on one of the Biztalk projects that contains a lot of lengthy orchestrations. In order to split them in manageable chunks, we are making intensive use of the call orchestration and start orchestration shapes. As long as the orchestrations remain in a single assembly, it works great. However, for complex solutions, it makes great sense to split these orchestrations into separate deployable assemblies - probably spanning across several BizTalk applications. 

In such cases, orchestrations in an assembly are by default not visible to orchestrations in another assembly. This is due to the default type modifier for the orchestration. The Type Modified for the orchestration is similar to the access qualifier of C#. By default this is set to "Internal". Obviously, with Internal, the orchestration is not visible outside the assembly within which it is coded. So if you are trying to call this orchestration from some other assembly which has referenced this assembly, you would need to explicitly make the orchestration "visible" outside the assembly. This can be done by setting the Type Modifier as "public".

This helps a lot in componentization of the orchestrations in a complex Biztalk solution.