수정 사항: WCF-SQL 어댑터 또는 BizTalk 어댑터 팩의 WCF-Oracle 어댑터를 사용할 때 수신 위치가 다시 시작됨

적용 대상
BizTalk Adapters

이 문서는 다음 제품에 적용됩니다.

  • BizTalk 어댑터 팩 2.0
  • BizTalk Adapter Pack 2010

증상

수신 위치에서 Microsoft BizTalk 어댑터 팩 2.0 또는 Microsoft BizTalk 어댑터 팩 2010에 포함된 다음 어댑터 중 하나를 사용하는 경우 수신 위치가 예기치 않게 다시 시작됩니다.

  • WCF(Windows Communication Foundation)-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, 메시지& 메시지, IInboundReply& reply)
at Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.TryReceive(TimeSpan timeout, Message& message)
위치: 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' 유형의 예외가 발생했습니다.
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)
Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)에서
위치: System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
위치: 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"이 만료되었습니다.
   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)
   Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)에서
   위치: System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

경고 2

참고

"WCF-Oracle" 어댑터에서 오류 메시지를 발생시켰습니다. 세부 정보 "System.TimeoutException: "WaitForMessage" 함수를 실행하는 동안 시간 제한 "00:02:00"이 만료되었습니다.
   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)
   Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)에서
   위치: System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

              

원인

이 문제는 WaitForMessage 메서드가 TimeoutException 예외를 생성할 때 수신 위치가 예기치 않게 다시 시작되기 때문에 발생합니다.

WaitForMessage 메서드가 TimeoutException 예외를 생성하면 TryReceive 메서드가 호출된 다음 WCF-SQL 어댑터 또는 WCF-Oracle 어댑터가 트랜잭션을 롤백합니다. 그러나 롤백 작업에서 ObjectDisposedException 예외가 생성될 수 있습니다. 따라서 "증상" 섹션에 언급된 경고 중 하나가 생성됩니다.

해결 방법

누적 업데이트 정보

BizTalk Adapter Pack 2010의 경우

이 문제를 해결하는 핫픽스는 BizTalk Adapter Pack 2010용 누적 업데이트 패키지 2에 포함되어 있습니다. 이 누적 업데이트 패키지를 구하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하세요.

2572999 BizTalk Adapter Pack 2010용 누적 업데이트 패키지 2

BizTalk 어댑터 팩 2.0

이 문제를 해결하는 핫픽스는 BizTalk Adapter Pack 2.0용 누적 업데이트 패키지 3에 포함되어 있습니다.

누적 업데이트 패키지를 구하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하세요.

2557150 BizTalk 어댑터 팩 2.0용 누적 업데이트 패키지 3

참고 이 핫픽스는 <WCF 추적 파일(.svcLog)에 필요한 TraceIdentifier> 및 </TraceIdentifier> 태그를 추가합니다. 핫픽스가 이러한 태그를 추가하면 추적 파일의 출력이 수정되고 서비스 추적 뷰어 도구(SvcTraceViewer.exe)가 큰 WCF 추적 파일을 더 빠르게 엽니다.

이 핫픽스를 적용하기 전에 다음 ::Exit 추적에는 TraceIdentifier> 및 </TraceIdentifier> 태그가 <없습니다.

<설명>ExecuteNonQuery::Exit</Description>

<설명>OpenConnection::Exit</Description>

<설명>ExecuteScalar::Exit</Description>

<설명>Polling_WaitForMessage::종료</설명>

상태

Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.

추가 정보

IInputChannel.WaitForMessage 메서드에 대한 자세한 내용은 다음 MSDN 웹 사이트를 참조하세요.

IInputChannel.WaitForMessage 메서드에 대한 일반 정보 IInputChannel.TryReceive 메서드에 대한 자세한 내용은 다음 MSDN 웹 사이트를 참조하세요.

IInputChannel.TryReceive 메서드에 대한 일반 정보 BizTalk Server 핫픽스에 대한 자세한 내용을 확인하려면 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하세요.

2003907 BizTalk Server 핫픽스에 대한 정보