8

我正在开发一个 BizTalk 项目,但不明白需要安装(双击)和导入(使用 biztalk 管理控制台)的原因。

我有一个 BizTalk 项目,我向它的资源添加了绑定并导出了一个 msi 文件。现在我想在另一台服务器上安装应用程序。

据我所知,这是 MSI 安装的作用:

  1. 将文件复制到文件系统
  2. 将程序集注册到 GAC
  3. 将应用程序添加到添加/删除程序小程序

但是,这是我的问题:

  1. 使用 msi 安装不会将应用程序添加到 Biztalk 管理控制台。我们需要导入msi。
  2. 使用 msi 卸载不会从 GAC 中删除程序集。它只删除它复制到文件系统的文件。卸载是否也可以删除 GAC 程序集?
  3. 如果我只是导入 MSI,我可以启动我的 biztalk 应用程序,它似乎运行良好。结合问题 #1 和 #2,为什么根本需要 MSI?我可以看到仅导入不会将其添加到 GAC,因此如果其他应用程序依赖它,它们将无法工作。

我确定我缺少 msi 提供的功能/配置,但有人可以帮助我理解为什么 msi 需要安装并导入 biztalk 以及为什么当你卸载它时没有完全卸载它安装的所有内容?

4

2 回答 2

12

部署 BizTalk 解决方案时需要执行两项操作。

为什么部署 BizTalk 解决方案是一个两步操作?

  1. 将 BizTalk 解决方案注册到 BizTalk 管理数据库
  2. 将 BizTalk Artefacts 和依赖项安装到文件系统

首先,构成您的解决方案的 BizTalk 程序集必须注册到 BizTalk 管理数据库。这将使 BizTalk 知道哪些架构、地图、管道和编排可用。

这是通过将您的 Windows 安装程序包导入 BizTalk 来完成的。

请记住,典型的 BizTalk 平台通常由许多物理服务器组成。但是,BizTalk 组中的所有服务器共享一个 BizTalk 管理数据库。

因此,需要对整个 BizTalk Group 进行一次导入操作

其次,已注册到 BizTalk 的 BizTalk 程序集需要物理存在于某个地方。因此,它们必须安装到文件系统中。

这是通过双击 Windows 安装程序包来完成的。

请注意,需要在属于 BizTalk Group 的任何物理服务器上重复安装操作。而且,由于 BizTalk 管理数据库中只有一个关于哪些程序集是解决方案的一部分的定义,这解释了为什么 BizTalk 程序集必须安装到全局程序集缓存 (GAC)。

请注意,到目前为止,规则很简单:

  • BizTalk 程序集必须安装在 BizTalk 组中每台服务器的 GAC 中
  • BizTalk 程序集必须在 BizTalk 管理数据库中导入(或注册)一次

但是,我们只处理了 BizTalk 程序集。此两步操作不涵盖 BizTalk 解决方案在运行时所需的所有其他程序集或其他依赖项(业务规则定义、COM 对象、绑定、配置文件等)。

跨环境部署

但是,当解决方案运行时,这些依赖项还必须根据需要存在于每个 BizTalk 服务器上。

这就是大多数这些人工制品也注册到 BizTalk 管理数据库的原因。但是这一次,这样做只是为了在创建 BizTalk 解决方案的 Windows Installer 程序包时引入依赖项,以便可以在目标服务器上适当地安装这些依赖项。

为什么 BizTalk 程序集在卸载时未从 GAC 中删除?

作为一般经验法则,注册到全局程序集缓存的程序集被视为共享资源。因此,出于安全原因,卸载时不会从 GAC 中删除 BizTalk 程序集。考虑当多个应用程序使用自定义 BizTalk 管道时会发生什么。在这种情况下,BizTalk 管道必须是单独的、通用的 BizTalk 应用程序的一部分。卸载此共享 BizTalk 应用程序将破坏依赖此管道的所有其他应用程序...

资源添加到 BizTalk 管理数据库时,您可以选择在导入时或安装时将程序集安装到 GAC 。我强烈建议不要使用“ GacOnImport ”功能,这在大多数典型的多服务器 BizTalk Groups 中没有意义

但是,对于 Windows Installer 程序包,有一种更简单、最灵活的方式来自定义可以对 BizTalk 程序集或其他依赖项执行的操作。这是通过预处理和后处理脚本完成的。

这些脚本允许在导入/安装操作期间在四个特定时间运行任意应用程序。

  • 导入前
  • 导入后
  • 安装前
  • 安装后

如果您希望在卸载时从 GAC 中删除程序集,只需在操作的“安装前”阶段安排适当的命令行即可。

于 2011-02-05T18:04:31.677 回答
9

导入 MSI 文件会将 MSI 中的程序集添加到 BizTalk 数据库中。如您所述,运行 MSI 会将程序集添加到 GAC。两者都是“安装” BizTalk 应用程序的必要条件。只有 BizTalk 程序集必须导入 BizTalk 管理数据库。BizTalk 使用的所有 DLL 都必须在 GAC 中。

可能值得一看http://msdn.microsoft.com/en-us/library/aa578463(v=BTS.10).aspx以了解您可以为您的每个资源自定义安装和导入行为BizTalk 应用程序。这将允许您仅导入 MSI 并将程序集添加到数据库中并将它们安装到 GAC 中,这样您就不会在添加/删除程序中产生额外的混乱。

至于为什么卸载已安装的 MSI 时没有从 GAC 中删除 DLL,我可以告诉你这是设计使然。如果您查看 MSDN http://msdn.microsoft.com/en-us/library/aa562001(v=bts.10).aspx上的此页面,您会看到此行为按预期进行了描述。该 MSDN 文章还包括如何从 GAC 中删除程序集下的链接,该链接解释了如何使用后处理脚本让您的 MSI 在卸载 MSI 时实际从 GAC 中删除您的程序集。

于 2011-02-05T06:00:45.940 回答