修正: BizTalk Adapter Pack で WCF-SQL アダプターまたは WCF-Oracle アダプターを使用すると、受信場所が再起動する

適用先
BizTalk Adapters

この記事は、次の製品に適用されます。

  • BizTalk Adapter Pack 2.0
  • BizTalk Adapter Pack 2010

現象

Microsoft BizTalk Adapter Pack 2.0 または Microsoft BizTalk Adapter Pack 2010 に含まれている次のアダプターのいずれかを受信場所で使用すると、受信場所が予期せず再起動します。

  • Windows Communication Foundation (WCF)-SQL アダプター
  • WCF-Oracle アダプター

さらに、BizTalk Server で ConnectionException が発生し、次のいずれかの警告がアプリケーション ログに記録された後に BizTalk Server が再起動する場合があります。

WCF-SQL アダプター

警告 1

「アダプター ""WCF-SQL"" でエラー メッセージが発生しました。 詳細 ""System.ObjectDisposedException: 破棄されたオブジェクトにアクセスできません。
オブジェクト名: 'Transaction'。
at System.Transactions.Transaction.Rollback(Exception e)
at Microsoft.Adapters.Sql.SqlAdapterInboundHandler.TryReceive(TimeSpan timeout, Message& message, IInboundReply& reply)
at Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.TryReceive(TimeSpan timeout, Message& message)
at System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive(TimeSpan timeout, RequestContext& requestContext)
at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive(TimeSpan timeout, RequestContext& requestContext)""."

警告 2

「アダプター ""WCF-SQL"" でエラー メッセージが発生しました。 詳細 "System.TimeoutException: 'System.TimeoutException' の例外がスローされました。
at Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
at Microsoft.Adapters.Sql.ExecutionHelper.ExecuteScalar(SqlCommand sqlCommand, TimeoutHelper timeoutHelper)
at Microsoft.Adapters.Sql.SqlAdapterInboundHandler.Polling_WaitForMessage(TimeoutHelper timeoutHelper)
at Microsoft.Adapters.Sql.SqlAdapterInboundHandler.WaitForMessage(TimeSpan timeout)
at Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
at System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()""."

              

WCF-Oracle アダプター

警告 1

アダプター "WCF-Oracle" でエラー メッセージが生成されました。 詳細 "Microsoft.ServiceModel.Channels.Common.ConnectionException: 関数 "WaitForMessage" の実行中にタイムアウト "00:02:00" の有効期限が切れました。 ---> System.TimeoutException: 関数 "WaitForMessage" の実行中にタイムアウト "00:02:00" の有効期限が切れました。
   at Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
   at Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout(OracleCommand command, TimeoutHelper timeoutHelper)
   at Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteNonQuery(OracleCommand command, OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
   --- 内部例外スタック トレースの終わり ---
   at Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage(TimeSpan timeout)
   at Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

警告 2

アダプター "WCF-Oracle" でエラー メッセージが生成されました。 詳細 "System.TimeoutException: 関数 "WaitForMessage" の実行中にタイムアウト "00:02:00" の有効期限が切れました。
   at Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
   at Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout(OracleCommand command, TimeoutHelper timeoutHelper)
   at Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteScalar(OracleCommand command, OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper, OracleCommonConnectionWrapper connection)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage(TimeSpan timeout)
   at Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

              

原因

この問題は、WaitForMessage メソッドが TimeoutException 例外を生成すると受信場所が予期せず再起動するために発生します。

WaitForMessage メソッドが TimeoutException 例外を生成すると、TryReceive メソッドが呼び出され、WCF-SQL アダプターまたは WCF-Oracle アダプターによってトランザクションがロールバックされます。 ただし、ロールバック操作で ObjectDisposedException 例外が生成される場合があります。 そのため、「現象」セクションに記載されている警告の 1 つが生成されます。

解決策

累積的な更新プログラムの情報

BizTalk Adapter Pack 2010

この問題を解決する修正プログラムは、BizTalk Adapter Pack 2010 の累積的な更新プログラム パッケージ 2 に含まれています。 この累積的な更新プログラム パッケージを入手する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

2572999 BizTalk Adapter Pack 2010 の累積的な更新プログラム パッケージ 2

BizTalk Adapter Pack 2.0

この問題を解決する修正プログラムは、BizTalk アダプター パック 2.0 の累積的な更新プログラム パッケージ 3 に含まれています。

累積的な更新プログラム パッケージを入手する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

2557150 BizTalk Adapter Pack 2.0 の累積的な更新プログラム パッケージ 3

注: この修正プログラムでは、WCF トレース ファイル (.svcLog> に必要な <TraceIdentifier タグと </TraceIdentifier> タグが追加されます。 修正プログラムでこれらのタグが追加されると、トレース ファイルの出力が修正され、Service Trace Viewer Tool (SvcTraceViewer.exe) で大きな WCF トレース ファイルがより迅速に開かれます。

次の ::Exit トレースには、この修正プログラムを適用する前の <TraceIdentifier> タグと </TraceIdentifier> タグがありません。

<Description>ExecuteNonQuery::Exit</Description>

<Description>OpenConnection::Exit</Description>

<Description>ExecuteScalar::Exit</Description>

<Description>Polling_WaitForMessage::Exit</Description>

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

追加情報

IInputChannel.WaitForMessage メソッドの詳細については、次の MSDN Web サイトを参照してください。

IInputChannel.WaitForMessage メソッドに関する一般的な情報 IInputChannel.TryReceive メソッドの詳細については、次の MSDN Web サイトを参照してください。

IInputChannel.TryReceive メソッドに関する一般的な情報BizTalk Server の修正プログラムの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

2003907 BizTalk Server 修正プログラムに関する情報