What I hadn’t appreciated about schema versioning in BizTalk Server
Most people know that when processing a message through the XmlDisassembler, if not explicitly told which schema to use through configuration, the disassembler would try to resolve the correct schema based on the message’s root node and namespace.
Most would also know, usually through the experience of getting it wrong so many times first, that if more than one assembly contains the same combination of root node and namespace for a schema, the receive pipeline, containing the disassembler, would fail with the error “Cannot locate document specification because multiple schemas matched the message type “<your message type here>”.”
What some miss (ehm, ehm) is that this is not true if the two schemas exist in two versions of the same assembly.
So – if you have an assembly called MySchemas.dll, version 126.96.36.199, …. which contains schema SomeRootNode#SomeNamespace and you have MySchemas2.dll, Version…… which contains schema SomeRootNode#SomeNamespace (same one) – BizTalk would fail.
If, however, you have the assembly MySchemas.dll, version 188.8.131.52, …. which contains schema SomeRootNode#SomeNamespace and then create MySchemas.dll, version 184.108.40.206, …. which contains schema SomeRootNode#SomeNamespace BizTalk would quite happily ignore the former and use the latest version available.
Makes perfect sense, of course!