修复: 当您在 BizTalk 适配器包中使用 WCF SQL 适配器或 WCF Oracle 适配器接收位置重新启动

本文适用于以下产品:

  • BizTalk 适配器包 2.0

  • BizTalk 适配器包 2010

症状

当您使用 Microsoft BizTalk 适配器包 2.0 中,或在 Microsoft BizTalk 适配器接收位置包 2010年包括以下适配器之一的情况时,意外重新启动接收位置:

  • 窗口的通信基础 (WCF)-SQL 适配器

  • WCF Oracle 适配器

此外,BizTalk Server 可能会遇到的ConnectionException异常,然后 BizTalk 服务器可能会重新启动后应用程序日志中记录的下列警告之一。

WCF SQL 适配器

警告 1

"适配器""WCF 的 SQL""引发一条错误消息。 详细信息""System.ObjectDisposedException: 无法访问已释放的对象。对象名称: 交易记录.at 在 Microsoft.Adapters.Sql.SqlAdapterInboundHandler.TryReceive System.Transactions.Transaction.Rollback (异常 e) (TimeSpan 超时,消息和邮件,IInboundReply 和答复) 在Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.TryReceive (时间跨度超时消息和消息) 在 System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive (时间跨度的超时值,RequestContext &requestContext) 在 System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive (时间跨度的超时值,RequestContext & requestContext)""。"

警告 2

"适配器""WCF 的 SQL""引发一条错误消息。 详细信息""System.TimeoutException: System.TimeoutException 类型的异常是在 thrown.at Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired ()Microsoft.Adapters.Sql.ExecutionHelper.ExecuteScalar (SqlCommand sqlCommand,TimeoutHelper timeoutHelper) 在 Microsoft.Adapters.Sql.SqlAdapterInboundHandler.Polling_WaitForMessage (TimeoutHelper timeoutHelper) 在在 Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage (时间跨度超时) 在 Microsoft.Adapters.Sql.SqlAdapterInboundHandler.WaitForMessage (时间跨度超时)在 System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage() System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage (时间跨度超时)""。"

WCF Oracle 适配器

警告 1

适配器"WCF Oracle"引发一条错误消息。 详细信息"Microsoft.ServiceModel.Channels.Common.ConnectionException: 超时"00: 02:00"过期时执行函数"WaitForMessage"。 ---> System.TimeoutException: 超时"00: 02:00"过期时执行函数"WaitForMessage"。 在 Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout (OracleCommand 命令,TimeoutHelper 在 Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()timeoutHelper) 在 Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection (在 Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteNonQuery (OracleCommonExecutionHelper executionHelper OracleCommand 命令)OracleCommonExecutionHelper executionHelper)---内部异常的堆栈跟踪---在 Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection (OracleCommonExecutionHelper executionHelper) 在结束Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage (OracleCommonExecutionHelper executionHelper) 在位于 Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage (时间跨度超时)在 System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage (时间跨度超时) 在 Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage (时间跨度超时)System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()"。

警告 2

适配器"WCF Oracle"引发一条错误消息。 详细信息"System.TimeoutException: 超时"00: 02:00"过期时执行函数"WaitForMessage"。 在 Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout (OracleCommand 命令,TimeoutHelper 在 Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()timeoutHelper) 在 Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage (在 Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteScalar (OracleCommonExecutionHelper executionHelper OracleCommand 命令)OracleCommonExecutionHelper executionHelper,OracleCommonConnectionWrapper 连接) 在 Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage (OracleCommonExecutionHelper executionHelper) 在在 Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage (时间跨度超时) 在 Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage (时间跨度超时)在 System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage() System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage (时间跨度超时)"。

原因

因为接收位置意外重新启动WaitForMessage方法在生成TimeoutException异常时,将出现此问题。 当WaitForMessage方法生成一个TimeoutException异常时,调用TryReceive方法时,然后在 WCF SQL 适配器或 WCF Oracle 适配器回滚该事务。 然而,回滚操作可能生成ObjectDisposedException异常。 因此,"症状"一节中提到的警告之一生成。

解决方案

累积更新信息

BizTalk 适配器包 2010

可以解决此问题的修复程序包括在累积更新包 2 BizTalk 适配器包 2010 中。 有关如何获取此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:2572999累积更新包 2 BizTalk 适配器包 2010年

BizTalk 适配器包 2.0

修补程序可以解决此问题为 BizTalk 适配器包 2.0 包含在累积更新包 3 中。 有关如何获取此累积更新程序包,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2557150 累积更新包 3 BizTalk 适配器包 2.0注意此修复程序添加< TraceIdentifier >和< / TraceIdentifier >在 WCF 跟踪文件 (.svcLog) 所需的标记。 此修复程序添加这些标记后,跟踪文件中的输出得到解决,并且服务跟踪查看器工具 (SvcTraceViewer.exe) 更快速地打开大型 WCF 跟踪文件。 以下:: 退出跟踪缺乏< TraceIdentifier >和< / TraceIdentifier >标记在您应用此修补程序之前: < 说明 > ExecuteNonQuery::Exit < / 说明 >< 说明 >OpenConnection::Exit < / 说明 >< ExecuteScalar::Exit 说明 > < / 说明 >< Polling_WaitForMessage::Exit 说明 > < / 说明 >

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

更多信息

IInputChannel.WaitForMessage方法的更多信息,请访问下面的 MSDN 网站:

IInputChannel.WaitForMessage 方法的常规信息IInputChannel.TryReceive方法的更多信息,请访问下面的 MSDN 网站:

IInputChannel.TryReceive 方法的常规信息BizTalk Server 修补程序的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2003907 BizTalk Server 修补程序有关的信息

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×