KHẮC PHỤC: Nhận vị trí khởi động lại khi bạn sử dụng bộ điều hợp WCF-SQL hoặc bộ WCF-Oracle hợp mới trong Gói Bộ điều hợp BizTalk

Áp dụng cho
BizTalk Adapters

Bài viết này áp dụng cho sản phẩm sau:

  • BizTalk Adapter Pack 2.0
  • BizTalk Adapter Pack 2010

Triệu chứng

Khi bạn sử dụng một trong các bộ điều hợp sau được bao gồm trong Microsoft BizTalk Adapter Pack 2.0 hoặc trong Microsoft BizTalk Adapter Pack 2010 trên một vị trí nhận, vị trí nhận khởi động lại bất ngờ:

  • Bộ điều hợp Windows Communication Foundation (WCF)-SQL
  • Bộ điều hợp WCF-Oracle hợp

Ngoài ra, BizTalk Server có thể gặp phải ngoại lệ ConnectionException, và sau đó máy chủ BizTalk có thể khởi động lại sau khi một trong những cảnh báo sau đây được ghi nhật ký trong nhật ký Ứng dụng.

Bộ điều hợp WCF-SQL

Cảnh báo 1

Lưu ý

"Bộ điều hợp ""WCF-SQL"" làm xuất hiện thông báo lỗi. Chi tiết ""System.ObjectDisposedException: Không thể truy cập đối tượng dùng một lần.
Tên đối tượng: 'Giao dịch'.
tại System.Transaction.Transaction.Rollback(Exception e)
tại Microsoft.Adapters.Sql.SqlAdapterInboundHandler.TryReceive(TimeSpan timeout, Message& message, IInboundReply& reply)
tại Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.TryReceive(TimeSpan timeout, Message& message)
tại System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive(TimeSpan timeout, RequestContext& requestContext)
tại System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive(TimeSpan timeout, RequestContext& requestContext)""."

Cảnh báo 2

Lưu ý

"Bộ điều hợp ""WCF-SQL"" làm xuất hiện thông báo lỗi. Chi tiết ""System.TimeoutException: Ngoại lệ của loại 'System.TimeoutException' đã được ném.
tại Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
tại Microsoft.Adapters.Sql.ExecutionHelper.ExecuteScalar(SqlCommand sqlCommand, TimeoutHelper timeoutHelper)
at Microsoft.Adapters.Sql.SqlAdapterInboundHandler.Polling_WaitForMessage(TimeoutHelper timeoutHelper)
tại Microsoft.Adapters.Sql.SqlAdapterInboundHandler.WaitForMessage(TimeSpan timeout)
tại Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
tại System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
tại System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()""."

              

WCF-Oracle hợp

Cảnh báo 1

Lưu ý

Bộ điều hợp "WCF-Oracle" nâng cao một thông báo lỗi. Chi tiết "Microsoft.ServiceModel.Channels.Common.ConnectionException: Hết thời gian chờ "00:02:00" đã hết hạn trong khi thực hiện hàm "WaitForMessage". >--- System.TimeoutException: Hết thời gian chờ "00:02:00" đã hết hạn trong khi thực hiện hàm "WaitForMessage".
   tại Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
   tại Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout(lệnh OracleCommand, TimeoutHelper timeoutHelper)
   tại Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteNonQuery(lệnh OracleCommand, OracleCommonExecutionHelper executionHelper)
   tại Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
   --- dấu vết ngăn xếp Ngoại lệ bên trong kết thúc ---
   tại Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper)
   tại Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage(TimeSpan timeout)
   tại Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
   tại System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   tại System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

Cảnh báo 2

Lưu ý

Bộ điều hợp "WCF-Oracle" nâng cao một thông báo lỗi. Chi tiết "System.TimeoutException: Hết thời gian chờ "00:02:00" đã hết hạn trong khi thực hiện hàm "WaitForMessage".
   tại Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
   tại Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout(lệnh OracleCommand, TimeoutHelper timeoutHelper)
   tại Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteScalar(lệnh OracleCommand, OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper, OracleCommonConnectionWrapper connection)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper)
   tại Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage(TimeSpan timeout)
   tại Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
   tại System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   tại System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

              

Nguyên nhân

Sự cố này xảy ra vì vị trí nhận khởi động lại bất ngờ khi phương pháp WaitForMessage tạo ra ngoại lệ TimeoutException.

Khi phương pháp WaitForMessage tạo ra một ngoại lệ TimeoutException, phương pháp TryReceive được gọi là, và sau đó bộ điều hợp WCF-SQL hoặc bộ điều hợp WCF-Oracle quay trở lại giao dịch. Tuy nhiên, các hoạt động quay lui có thể tạo ra một ngoại lệ ObjectDisposedException. Vì vậy, một trong những cảnh báo được đề cập trong phần "Triệu chứng" được tạo ra.

Giải pháp

Thông tin cập nhật tích lũy

Đối với BizTalk Adapter Pack 2010

Hotfix giải quyết sự cố này được bao gồm trong gói cập nhật tích lũy 2 cho BizTalk Adapter Pack 2010. Để biết thêm thông tin về cách nhận gói cập nhật tích lũy này, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

2572999 cập nhật tích lũy gói 2 cho BizTalk Adapter Pack 2010

Đối với BizTalk Adapter Pack 2.0

Hotfix giải quyết sự cố này được bao gồm trong gói cập nhật tích lũy 3 cho BizTalk Adapter Pack 2.0.

Để biết thêm thông tin về cách nhận gói cập nhật tích lũy, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

2557150 cập nhật tích lũy gói 3 cho BizTalk Adapter Pack 2.0

Lưu ý Hotfix <này thêm thẻ TraceIdentifier><và /TraceIdentifier> được yêu cầu trong tệp theo dõi WCF (.svcLog). Sau khi cập nhật nóng thêm các thẻ này, đầu ra trong tệp theo dõi được sửa và Công cụ Trình xem Theo dõi Dịch vụ (SvcTraceViewer.exe) sẽ mở tệp theo dõi WCF lớn nhanh hơn.

Sau đây ::Exit traces lack the <TraceIdentifier and <> /TraceIdentifier> tags before you apply this hotfix:

<Mô>tả ExecuteNonQuery::Exit</Description>

<Mô tả>OpenConnection::Exit</Description>

<Mô tả>ExecuteScalar::Exit</Description>

<Mô Polling_WaitForMessage>::Thoát</Mô tả>

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".

Xem thêm thông tin

Để biết thêm thông tin về phương pháp IInputChannel.WaitForMessage, hãy truy cập trang web MSDN sau:

Thông tin chung về phương pháp IInputChannel.WaitForMessage Để biết thêm thông tin về phương pháp IInputChannel.TryReceive, hãy truy cập trang web MSDN sau:

Thông tin chung về phương pháp IInputChannel.TryReceive Để biết thêm thông tin về các cập nhật nóng Máy chủ BizTalk, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

2003907 tin về hotfixes BizTalk Server