BizTalk业务流程故障处理在不同的机器上不同 - 为什么?

时间:2016-01-21 10:56:43

标签: wcf soap biztalk

我有两台BizTalk开发机器,其中一台我试图与另一台机器保持一致状态。我的一个测试检查从业务流程收到的SOAP故障响应的内容 - 这是设计的。问题是两台机器之间,据我所知,它们的配置相同,并且具有安装在其上的相同配置的相同应用程序,处理故障的方式不同,如业务流程中捕获的异常的堆栈跟踪所示。

预期的传入故障是从配置了SOAP 1.1 Fault操作的Specify Later,请求 - 响应端口接收的。这是一个catch块捕获的,它只是将异常细节序列化为另一个故障消息并将其返回给调用者。我可以看到故障是由两台机器上的同一个catch块以相同的方式捕获的。

基线机器堆栈跟踪:

PackageManager pm = context.getPackageManager();
try {
    if (pm.getApplicationInfo("com.your.package.name", 0) == null) {
        // no talk, no update
        Toast.makeText(context, "packagenot found", Toast.LENGTH_SHORT).show();

    } else {
        Intent packageIntent= pm.getLaunchIntentForPackage("com.your.package.name");

        packageIntent.addCategory(Intent.ACTION_SENDTO);
        packageIntent.setType("text/plain");
        startActivity(packageIntent);
    }
} catch (PackageManager.NameNotFoundException e) {

    // no talk, no update
    Toast.makeText(context, "Package not found", Toast.LENGTH_SHORT).show();
}

其他机器的堆栈跟踪:

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)

这是我注意到的行为的唯一区别。为什么同一业务流程的两个实例以不同方式处理相同的错误?

1 个答案:

答案 0 :(得分:1)

这是由于在进程外隔离主机中托管业务流程时托管环境的严重性。当IIS应用程序池设置为Enable 32-bit Applications = False时,BizTalk适配器的故障处理逻辑略有不同,或者在堆栈跟踪方面表达不同,这会导致测试失败。

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

修改

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