简体   繁体   中英

Where does BizTalk keep dlls?

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. 在此处输入图像描述

So I was wondering what does this even do? 在此处输入图像描述

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. 在此处输入图像描述 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.

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.

消息类型提升属性

vs

架构

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM