能否将BizTalk Accelerator for RosettaNet代码部署为Azure Web App?是否需专用VM?
咱们逐个拆解你的问题,结合BTARN的核心特性和实际部署经验来聊:
1. 部署BTARN相关的C#应用必须用专用BizTalk虚拟机吗?
是的,基本需要依赖安装了BizTalk Server和BTARN组件的虚拟机/服务器。原因很简单:BTARN本身是BizTalk Server的扩展加速器,它的核心功能(比如RosettaNet协议解析、交易状态管理、伙伴交互逻辑)完全依赖BizTalk的运行时环境——包括BizTalk Host Instance服务、BizTalk管理数据库、BTARN专用的配置/跟踪数据库,以及一系列本地注册的管道组件和服务类。
如果你的C#代码是直接调用BTARN的API(比如发送RosettaNet消息、查询交易记录),这些API底层会和BizTalk的运行时交互,没有完整的BizTalk+BTARN环境,代码根本无法初始化相关对象,会抛出找不到依赖组件或服务未启动的错误。除非你只是写完全不涉及BTARN核心逻辑的辅助代码,否则专用BizTalk环境是必需的。
2. 能否将这类C#应用部署为Azure Web App?
直接部署是不可行的。Azure Web App是托管式的Paas环境,你没办法在里面安装BizTalk Server和BTARN的完整组件——这些组件需要本地系统权限、注册表配置、依赖Windows服务,而Web App的沙箱环境不允许这些操作。
不过有替代方案:你可以把BTARN的核心处理逻辑部署在Azure VM上的BizTalk Server里,然后开发一个轻量的Azure Web App作为前端,通过WCF、REST API或者Azure服务总线来调用BizTalk VM上的BTARN服务。这样Web App负责接收用户请求或外部调用,真正的RosettaNet协议处理交给Azure VM里的BizTalk+BTARN环境来完成。
3. 设置DLL的Local copy=true、配置web.config连接字符串后,代码能正常运行吗?
大概率不能正常运行。原因有两点:
- 你设置Local copy=true只能把项目依赖的BTARN相关DLL(比如
Microsoft.BizTalk.RosettaNet.dll)复制到输出目录,但BTARN的运行不只是依赖DLL,还需要BizTalk运行时服务处于启动状态、BTARN的伙伴配置/协议规则已经在BizTalk管理控制台中部署完成,以及注册表中存在BTARN的相关配置项——这些都不是靠复制DLL能解决的。 - BTARN的数据库连接不是简单在web.config里配置就能生效的。它的API会依赖BizTalk管理数据库中的连接信息来访问BTARN的跟踪库和配置库,单独手动配置的SQL连接字符串无法被BTARN的组件识别,调用API时还是会报错找不到合法的BizTalk上下文。
你的MSDN示例代码(Default.cs、QueryData.cs)应该是用来查询BTARN交易数据的,这类代码本质上是调用BTARN的查询API,必须在已经配置好的BizTalk+BTARN环境中运行才能正常访问数据库和返回结果。
内容的提问来源于stack exchange,提问作者Neo

