【发布时间】:2016-01-21 10:56:42
【问题描述】:
我有两台 BizTalk 开发机器,其中一台正在尝试与另一台保持一致。我的一项测试检查从编排收到的 SOAP 错误响应的内容 - 这是设计使然。问题在于,据我所知,两台机器的配置相同,并且安装了相同配置的相同应用程序,它们处理故障的方式不同,如业务流程中捕获的异常的堆栈跟踪所示。
预期的传入故障是从配置了 SOAP 1.1 故障操作的“稍后指定”请求-响应端口接收的。这被一个 catch 块捕获,该块简单地将异常详细信息序列化为另一个错误消息并将其返回给调用者。我可以看到两台机器上的相同 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)
这是我注意到的唯一行为差异。为什么同一个编排的两个实例处理同一个故障的方式不同?
【问题讨论】:
-
您已验证两台计算机的补丁级别相同? .Net 和 BizTalk CU 尤其如此。