BizTalk 编排故障处理在不同的机器上不同 - 为什么?

BizTalk orchestration fault handling different on different machines - why?

我有两台 BizTalk 开发机器,我试图让其中一台与另一台进入一致状态。我的一项测试检查从编排接收到的 SOAP 故障响应的内容——这是设计使然。问题是,据我所知,这两台机器配置相同,并且安装了具有相同配置的相同应用程序,它们处理故障的方式不同,如编排中捕获的异常的堆栈跟踪所示。

预期的传入故障是从配置了 SOAP 1.1 故障操作的“稍后指定”请求-响应端口接收到的。这是由一个 catch 块捕获的,该块简单地将异常详细信息序列化为另一个错误消息,并将其 returns 发送给调用者。我可以看到两台机器上的同一个 catch 块以相同的方式捕获了故障。

基线机器堆栈跟踪:

at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkAsyncResult.End()
at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.EndOperation(IAsyncResult result)
at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.Microsoft.BizTalk.Adapter.Wcf.Runtime.ITwoWayAsync.EndTwoWayMethod(IAsyncResult result)
at AsyncInvokeEndEndTwoWayMethod(Object , Object[], IAsyncResult )
at System.ServiceModel.Dispatcher.AsyncMethodInvoker.InvokeEnd(Object instance, Object[]&outputs, IAsyncResult result)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd(MessageRpc&rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7(MessageRpc&rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

其他机器的堆栈跟踪:

at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.EndOperation(IAsyncResult result)
at AsyncInvokeEndEndTwoWayMethod(Object , Object[], IAsyncResult )
at System.ServiceModel.Dispatcher.AsyncMethodInvoker.InvokeEnd(Object instance, Object[]&outputs, IAsyncResult result)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd(MessageRpc&rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7(MessageRpc&rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

这是我注意到的唯一行为差异。为什么同一个编排的两个实例对同一个故障的处理方式不同?

这是由于在 out-of-process 隔离主机中托管业务流程时托管环境的位数。当IIS应用程序池设置为Enable 32-bit Applications = False时,BizTalk适配器的故障处理逻辑略有不同,或者在stack trace方面的表达方式不同,导致测试失败。

其实我自己设置的,忘记了,但这样做的原因是一个完全不相关的应用程序在我的 IIS 配置中添加了一个全局模块,该模块是在 64 位模式下编译的,这导致了应用程序池反复出错,然后在 32 位模式下 运行 时关闭。这个模块是 UxCertAuthModule.dll,我相信它是由 Windows Azure Pack 的组件之一安装的。我相信这是一个错误,删除这个全局模块可以修复 32 位应用程序池和我的测试。

编辑:

我已将此作为 Azure Pack forums 上的一个可能错误提出。