Where does BizTalk keep dlls?

462 views Asked by At

I am having some trouble with BizTalk saying a schema doesn't exist when it does exist.

I can see it in the BizTalkMgmtDb using

select * from bt_documentspec where msgtype like '%myschema%'

I can see it in the BizTalk Server Administration Console > <All Artifacts> > Schemas > My Schema.

This paragraph is optional. I'm only including it so you know I already tried the answer you get when you google this problem. The exact error message I get is something like "This Assembler cannot retrieve a document specification using this type" which if you google that tells you the schema is either not deployed or the root element you're using exists in two separate namespaces so you should supply a DocSpecName on the SendPorts XMLTransmit 1 2.

I've also tried reinstalling the dll that contains the problem schema into the GAC as per the answer to this question. That didn't work either but now I have more questions anyways.

if I do gacutil -l none of my assemblies are listed there. enter image description here

So I was wondering what does this even do? enter image description here

Because those assemblies are not listed under gacutil -l. Also when you look at those assemblies
it shows a source location and a destination location. enter image description here Why? Why not just THE location? I can't even find %BTAD_InstallDir% on my computer so there are a minimum of 4 possible locations where this schema dll might be.

  1. source location
  2. destination location (%BTAD_InstallDir%)
  3. "the GAC"
  4. wherever it actually is because there doesn't seem to be a %BTAD_InstallDir%.

So if I want to "update the GAC" to make sure this schema is there how do I do that? What dll is BizTalk ACTUALLY using? The one in %BTAD_InstallDir% or the one in the GAC?

BizTalk 2010.

1

There are 1 answers

3
Dijkgraaf On

It has nothing to do with where the DLL is, it has to do with the fact that either

  1. The XML payload namespace and root node does not match any schema
  2. You have two or more schemas with exactly the same namespace and root node that match.

If you don't have any namespace on the XML, then it will try and match on Root node only, but again if you have more than one schema with the same root node, it will fail.

What you need to do is look at the suspended message and look at it's context properties and see what it's Message Type is, and compare that against the schema in BizTalk. There should be exactly one that matches.

Message Type promoted property

vs

Schema

But to answer your question,

  1. The source location is usually just the path of where the DLL was when it was initially imported in Dev.
  2. the %BTAD_InstallDir% is the directory you chose when importing a MSI, the default location is C:\Program Files (x86)\Generated by BizTalk. However that is just where it puts it initially
  3. Yes, in the end the actual one it uses will be in the GAC, which is under C:\Windows\Microsoft.NET\assembly\GAC_MSIL

Note: If the DLL has been previously been deployed and you are deploying a new one then make sure you restart the host instances afterwards, as it will cache DLLs in memory for a period.