更新应用程序和工件的已知问题

更新应用程序

移除或删除工件不会将其从所有位置移除

删除或移除这些项目会将其从 BizTalk Server 数据库中删除,使其不再显示在管理控制台或由 BTSTask ListApp 命令生成的应用程序的项目列表中。 它不会从 Windows 注册表、全局程序集缓存(GAC)、虚拟目录或文件系统中删除项目(如果它存在于这些位置中的任何位置)。 如果发送端口、发送端口组、接收端口和接收位置仅存在于 BizTalk 管理数据库中,此操作将完全删除该项目。

更新工件

删除或更改项目的状态可能会导致应用程序无法正常工作

将引用从一个应用程序添加到另一个应用程序并对其依赖的项目状态进行任何更改,或者删除项目时,具有依赖项的应用程序将无法正常工作。 有关更改项目状态的详细信息,请参阅 有关管理项目https://go.microsoft.com/fwlink/?LinkID=154725)中相应项目的部分。

不支持 .NET 策略文件

BizTalk Server 不支持使用 .NET 策略文件。 这是因为策略文件可能无法按预期工作。 策略文件将 .NET 重定向到 GAC 中的指定程序集版本,但 BizTalk Server 通常从缓存或 BizTalk 管理数据库中访问程序集和项目数据。 根据工件类型、缓存情况以及主机实例是否重新启动,策略文件可能无法执行所需的作用。

更新程序集

如果主机未停止,对程序集的更改可能不会生效

BizTalk 程序集必须遵循 .NET 版本控制规则。 这一点的主要含义是,在针对另一个 .NET 项目或程序集的特定版本(包括 BizTalk 项目)生成后,BizTalk 项目将继续使用该版本,直到针对较新版本重新生成该版本。

开发过程中与 .NET 版本控制相关的一个常见问题是,当 BizTalk 项目的版本号未更改时,如果程序集在不停止和重新启动加载这些类型的 BizTalk 主机实例的情况下重新部署,就会出现问题。

再次运行进程时,更改不会生效。 这是因为 .NET 程序集加载到内存中的方式。 由于主机已有程序集的内存中副本,因此在将新副本放入全局程序集缓存(GAC)时,它不会重新加载程序集。 例如,如果部署并运行具有业务流程的程序集版本 1.0.0.0,并且对业务流程进行了更改,但版本号未更改,则更改不会生效。 停止主机实例后,将释放程序集的内存中副本,当主机实例再次启动时,它将重新加载程序集的新副本并获取更改。 如果已部署新版本,例如版本 2.0.0.0,并且已加载,则更改将生效。

更改程序集版本可能会中断程序集与按版本引用它的项之间的关系

在 .NET Framework 开发中,通常在构建过程中将程序集版本号更新为当前的构建号。 但是,在开发 BizTalk 解决方案时,更改程序集版本号可能会中断程序集与其程序集版本号引用 DLL 的依赖项之间的关系。 下表列出了通过其版本号引用 BizTalk Server 程序集的项,以及更改程序集版本号所产生的影响。

实体 更改程序集版本号的效果
绑定文件 更改程序集版本号会导致引用程序集的任何现有绑定文件失败。 这是因为绑定文件通过包含其版本号的属性引用程序集。

可以使用记事本或其他编辑器更新绑定文件中的版本信息。 还可以重新部署解决方案,然后使用 BizTalk Server 管理控制台重新生成绑定文件。 最后,可以使用脚本自动执行部署和版本控制。 有关部署的详细信息,请参阅 部署和管理 BizTalk 应用程序https://go.microsoft.com/fwlink/?LinkID=154210)。
BAM 跟踪配置文件定义 .btt 文件 更改程序集版本号会导致任何现有的 BAM 跟踪配置文件定义文件失败。 BAM 跟踪文件采用二进制文件格式,因此无法对其进行编辑,必须重新生成它们。 如果需要 BAM 跟踪配置文件,可能需要执行以下任一操作:

- 避免在生成过程中频繁更新版本号
- 延迟构建 BAM 跟踪配置文件,直到版本号稳定
使用 Web 服务发布向导发布的 Web 服务 当 Web 服务发布向导用于生成 ASP.NET Web 接口时,BizTalk Server 程序集的程序集版本将包含在 ASP.NET 源代码中。 程序集版本号在运行时由 ASP.NET 接口用作 Web 服务操作的 bodyTypeAssemblyQualifiedName 属性的一部分。 如果 BizTalk Server 程序集的版本号更改而不更新 bodyTypeAssemblyQualifiedName 属性,则 BizTalk Server 将拒绝后续的 Web 服务作。

如果接收位置使用 XmlDefaultPipeline,则订阅依赖于文档类型。 它使用嵌入的程序集信息,如果程序集不存在,将失败。 如果您使用 PassThruPipeline(这是默认设置,当您公开端口并让向导创建接收位置时),订阅将忽略此嵌入的程序集信息。