Oracle Database 어댑터에서 큰 개체 데이터 형식 스트리밍
Microsoft BizTalk Adapter for Oracle Database는 Oracle LOB(Large Object) 데이터 형식에 대한 스트리밍을 지원합니다. Oracle Database 어댑터 작업이 호출되고 SOAP 메시지를 교환하여 응답이 반환됩니다. SOAP 메시지 본문은 XML 노드로 구성됩니다.
어댑터에서 지원하는 메시지 스트리밍에는 두 가지 종류가 있습니다.
노드 스트리밍. 노드 스트리밍에서 각 노드는 Oracle 데이터베이스로 전송되거나 클라이언트로 반환되기 전에 어댑터에 의해 버퍼링됩니다. 즉, LOB 데이터 형식의 경우 전체 값이 버퍼로 읽혀집니다.
노드 값 스트리밍. 노드 값 스트리밍에서 노드의 실제 값은 Oracle 데이터베이스와 클라이언트 사이의 청크로 스트리밍할 수 있습니다. 노드 값 스트리밍은 어댑터 클라이언트와 Oracle 데이터베이스 간의 LOB 데이터 형식의 엔드 투 엔드 스트리밍을 지원합니다.
이러한 스트리밍 모드는 모두 WCF의 메시지에 대한 노드 스트리밍 및 노드 값 스트리밍을 지원합니다. 이러한 이유로 LOB 형식에 대한 스트리밍은 어댑터와 클라이언트 애플리케이션 모두에서 메시지를 만들고 사용하는 방법과 밀접하게 연결됩니다. 그 결과 LOB 형식 스트리밍에 대한 지원이 모든 프로그래밍 모델에서 동일하지 않습니다.
이 항목의 섹션에서는 다음을 제공합니다.
WCF에서 메시지 스트리밍을 지원하는 방법과 어댑터에서 메시지 스트리밍을 구현하는 방법에 대한 기본 배경 정보입니다.
각 프로그래밍 모델에서 어댑터를 사용할 때 LOB 데이터 형식에 대한 스트리밍을 지원하는 방법에 대한 정보입니다.
스트리밍 기본 사항
Oracle 데이터베이스 어댑터에서 구현된 스트리밍에 대한 지원은 다음의 조합입니다.
WCF의 메시지 스트리밍 지원.
Oracle 클라이언트 라이브러리(ODP.NET)의 스트리밍 지원.
어댑터에서 내부적으로 메시지를 만들고 사용하는 방식입니다.
WCF의 메시지 스트리밍 지원
WCF에서 메시지 스트리밍을 지원하는 방법은 메시지를 만드는 방법과 메시지 사용 방법에 따라 달라집니다.
WCF 메시지는 System.ServiceModel.Channels.Message의 정적 Create 메서드를 사용하여 만들어집니다. 이 메서드에는 메시지 본문을 전달하는 다양한 방법을 지원하는 여러 오버로드가 있습니다. 다음을 사용하여 메시지 본문을 전달하여 WCF 메시지를 만들 수 있습니다.
System.Xml. XmlReader 또는
System.ServiceModel.Channels.BodyWriter.
를 사용하여 WCF 메시지를 사용할 수 있습니다.
Message.GetReaderAtBodyContents()를 호출하여 XmlReader 또는
Message.WriteBodyContents(XmlDictionaryWriter)를 호출하여 XmlDictionaryWriter입니다.
다음 표에서는 메시지를 만들고 사용하는 다양한 조합에 대해 WCF가 어떻게 동작하는지 보여 줍니다.
을 사용하여 만든 메시지 | 사용한 메시지 | WCF 동작 |
---|---|---|
XmlBodyWriter | XmlDictionaryWriter | 노드 값 스트리밍 이 지원됩니다. WCF는 스트리밍을 사용하도록 설정하기 위해 두 기록기를 함께 파이프합니다. XmlBodyWriter와 XmlDictionaryWriter는 모두 노드 값 스트리밍을 지원해야 합니다. |
XmlBodyWriter | XmlReader | 노드 스트리밍 이 지원됩니다. WCF는 내부적으로 XmlReader를 버퍼링합니다. |
XmlReader | XmlDictionaryWriter | 노드 스트리밍 이 지원됩니다. WCF는 내부적으로 XmlReader 를 버퍼링하고 XmlDictionaryWriter로 다시 호출합니다. |
XmlReader | XmlReader | 노드 스트리밍 이 지원됩니다. WCF는 내부적으로 XmlReader를 버퍼링합니다. |
Oracle 클라이언트 라이브러리의 스트리밍 지원(ODP.NET)
ODP.NET 다음과 같은 방식으로 스트리밍을 지원합니다.
스트리밍은 Oracle LOB 데이터 형식에서만 지원됩니다.
일부 테이블(및 뷰) 작업의 경우 LOB 데이터 형식이 버퍼링됩니다. 따라서 스트리밍은 지원되지 않습니다.
어댑터의 내부 메시지 처리
어댑터는 다음과 같은 방식으로 스트리밍을 지원합니다.
어댑터는 Message 를 확장하여 사용자 지정 메시지 클래스인 Microsoft.Adapters.AdapterUtilities.AdapterMessage를 구현합니다. 어댑터 클라이언트에 제공하는 모든 WCF 메시지에 대해 AdapterMessage 를 만듭니다. 여기에는 모든 아웃바운드 작업에 대한 응답 메시지와 POLLINGSTMT 작업에 대한 요청 메시지가 포함됩니다. 이렇게 하면 어댑터가 ReadValueChunk를 지원하는 XmlReader를 어댑터 클라이언트에 제공하여 ReadLOB 작업에 대한 노드 값 스트리밍을 지원할 수 있습니다.
어댑터는 XmlDictionaryWriter의 사용자 지정 구현을 사용하여 클라이언트에서 받은 모든 메시지를 사용합니다.
어댑터는 ReadLOB 응답 메시지를 제외하고 XmlBodyWriter의 사용자 지정 구현을 사용하여 클라이언트에 보내는 모든 메시지를 만듭니다. 여기에는 모든 아웃바운드 작업에 대한 응답 메시지와 POLLINGSTMT 작업에 대한 요청 메시지가 포함됩니다.
WCF 채널 모델의 스트리밍 지원
다음 표에서는 WCF 채널 모델에서 스트리밍을 지원하는 방법에 대한 자세한 정보를 제공합니다.
작업 | 노드 스트리밍 | Node-Value 스트리밍 | Description |
---|---|---|---|
테이블 삽입 작업 | 지원됨* | 어댑터와 Oracle 데이터베이스 간에 지원되지 않습니다. 클라이언트와 어댑터 간에 지원됨.* | LOB 열의 값이 ODP.NET 버퍼링된 다음 삽입이 수행되므로 엔드 투 엔드 노드 값 스트리밍이 지원되지 않습니다. 그러나 클라이언트가 BodyWriter를 사용하여 메시지를 만드는 경우 LOB 열에 대해 클라이언트와 어댑터 간의 노드 값 스트리밍이 가능합니다. |
테이블 선택 작업 | 지원됨 | 지원됨 | 어댑터는 BodyWriter 를 사용하여 응답 메시지를 만듭니다. 클라이언트가 XmlDictionaryWriter를 사용하여 메시지를 사용하는 경우 LOB 열에 대한 노드 값 스트리밍이 발생합니다. |
테이블 업데이트 작업 | 지원됨 | 어댑터와 Oracle 데이터베이스 간에 지원되지 않습니다. 클라이언트와 어댑터 간에 지원합니다. | LOB 열의 값이 ODP.NET 버퍼링된 다음 업데이트가 수행되므로 엔드 투 엔드 노드 값 스트리밍이 지원되지 않습니다. 그러나 클라이언트가 BodyWriter를 사용하여 메시지를 만드는 경우 LOB 열에 대해 클라이언트와 어댑터 간의 노드 값 스트리밍이 가능합니다. |
테이블 삭제 작업 | 지원됨 | 어댑터와 Oracle 데이터베이스 간에 지원되지 않습니다. 클라이언트와 어댑터 간에 지원합니다. | LOB 열의 값이 ODP.NET 버퍼링된 다음 삭제가 수행되므로 엔드 투 엔드 노드 값 스트리밍이 지원되지 않습니다. 그러나 클라이언트가 BodyWriter를 사용하여 메시지를 만드는 경우 LOB 열에 대해 클라이언트와 어댑터 간의 노드 값 스트리밍이 가능합니다. |
테이블 ReadLOB 작업 | 지원됨 | 지원됨 | ReadLOB 작업은 주로 WCF 서비스 모델에서 LOB 데이터 열을 스트리밍하도록 설계되었습니다. WCF 채널 모델에서 클라이언트가 XmlReader 를 사용하여 메시지를 사용하는 경우(응답 메시지에서 GetReaderAtBodyContents 메서드를 호출하여) 엔드투엔드 노드 값 스트리밍이 발생합니다. 어댑터가 ReadLOB 응답 메시지에 대한 ReadValueChunk 호출을 지원하는 XmlReader를 반환하기 때문입니다. 그러나 WCF 채널 모델에서 ReadLOB 작업을 사용하지 않는 것이 좋습니다. 대신 선택 작업 또는 SQLEXECUTE 작업을 사용할 수 있습니다. |
테이블 업데이트LOB 작업 | 지원됨 | 지원됨 | 어댑터는 XmlDictionaryWriter 를 사용하여 요청 메시지를 사용합니다. 클라이언트가 BodyWriter 를 사용하여 요청 메시지를 만드는 경우 LOB 데이터에 대한 엔드 투 엔드 노드 값 스트리밍이 발생합니다. |
SQLEXECUTE 작업 | 지원됨 | 지원됨 | 어댑터는 BodyWriter 를 사용하여 응답 메시지를 만듭니다. 클라이언트가 XmlDictionaryWriter 를 사용하여 응답 메시지를 사용하는 경우 LOB 데이터에 대한 엔드 투 엔드 노드 값 스트리밍이 발생합니다. 어댑터가 Oracle 데이터베이스에서 작업을 호출하기 전에 모든 피연산자를 버퍼링해야 하므로 엔드 투 엔드 노드 값 스트리밍은 요청 메시지에 지원되지 않습니다. |
저장 프로시저 및 함수 작업 | 지원됨 | 지원됨 | 어댑터는 BodyWriter 를 사용하여 응답 메시지를 만듭니다. 클라이언트가 XmlDictionaryWriter 를 사용하여 응답 메시지를 사용하는 경우 LOB 데이터에 대한 엔드 투 엔드 노드 값 스트리밍이 발생합니다. 즉, 응답 메시지의 OUT 및 IN OUT 프로시저 및 함수 매개 변수에 대해 스트리밍이 지원됩니다. 어댑터가 Oracle 데이터베이스에서 작업을 호출하기 전에 모든 피연산자를 버퍼링해야 하므로 엔드 투 엔드 노드 값 스트리밍은 요청 메시지에 지원되지 않습니다. |
POLLINGSTMT 작업 | 지원됨 | 지원됨 | 어댑터는 BodyWriter 를 사용하여 POLLINGSTMT 요청 메시지를 만듭니다. 클라이언트가 XmlDictionaryWriter를 사용하여 메시지를 사용하는 경우 LOB 열에 대한 노드 값 스트리밍이 발생합니다. |
WCF 채널 모델을 사용할 때 코드에서 LOB 데이터 스트리밍을 구현하는 방법에 대한 자세한 내용은 WCF 채널 모델을 사용하여 Oracle 데이터베이스 LOB 데이터 형식 스트리밍을 참조하세요.
WCF 서비스 모델의 스트리밍 지원
메시지의 XML 표현과 해당 메시지의 관리 코드 개체 표현 간에 직렬화 및 역직렬화하려면 전체 메시지를 쓰고 메모리로 읽어야 합니다. 이러한 이유로 대부분의 작업에는 노드 스트리밍이나 노드 값 스트리밍이 지원되지 않습니다.
유일한 예외는 ReadLOB 작업입니다. 이 작업은 WCF 서비스 모델에서 테이블 읽기 및 LOB 열 보기에 대한 엔드 투 엔드 스트리밍을 지원하도록 특별히 구현됩니다.
BizTalk Server 스트리밍 지원
다음 표에서는 BizTalk Server 스트리밍을 지원하는 방법에 대한 자세한 정보를 제공합니다. ("어댑터"에 대한 모든 참조는 Oracle 데이터베이스 어댑터를 참조합니다. WCF-Custom 어댑터는 항상 이 표의 전체 이름으로 참조됩니다.)
작업 | 노드 스트리밍 | Node-Value 스트리밍 | Description |
---|---|---|---|
테이블 삽입 작업 | 지원됨* | 어댑터와 Oracle 데이터베이스 간에 지원되지 않습니다. 그러나 데이터는 BizTalk Server 어댑터 간에 스트리밍됩니다. | LOB 열의 값이 ODP.NET 버퍼링된 다음 삽입이 수행되므로 엔드 투 엔드 노드 값 스트리밍이 지원되지 않습니다. 그러나 WCF-Custom 어댑터가 BodyWriter를 사용하여 메시지를 만들기 때문에 BizTalk Server 어댑터와 어댑터 간의 노드 값 스트리밍이 LOB 데이터 형식에 대해 지원됩니다. |
테이블 선택 작업 | 지원됨 | 지원됨 | WCF-Custom 어댑터는 XmlDictionaryWriter 를 사용하여 응답 메시지를 사용하므로 LOB 형식에 대한 엔드 투 엔드 노드 값 스트리밍이 지원됩니다. |
테이블 업데이트 작업 | 지원됨 | 어댑터와 Oracle 데이터베이스 간에 지원되지 않습니다. 그러나 데이터는 BizTalk Server 어댑터 간에 스트리밍됩니다. | LOB 열의 값이 ODP.NET 버퍼링된 다음 업데이트가 수행되므로 엔드 투 엔드 노드 값 스트리밍은 지원되지 않습니다. 그러나 WCF-Custom 어댑터가 BodyWriter를 사용하여 메시지를 만들기 때문에 BizTalk Server 어댑터와 어댑터 간의 노드 값 스트리밍이 LOB 데이터 형식에 대해 지원됩니다. |
테이블 삭제 작업 | 지원됨 | 어댑터와 Oracle 데이터베이스 간에 지원되지 않습니다. 그러나 데이터는 BizTalk Server 어댑터 간에 스트리밍됩니다. | LOB 열의 값이 ODP.NET 버퍼링된 다음 삭제가 수행되므로 엔드 투 엔드 노드 값 스트리밍이 지원되지 않습니다. 그러나 WCF-Custom 어댑터가 BodyWriter를 사용하여 메시지를 만들기 때문에 BizTalk Server 어댑터와 어댑터 간의 노드 값 스트리밍이 LOB 데이터 형식에 대해 지원됩니다. |
테이블 ReadLOB 작업 | ReadLOB 작업은 BizTalk Server 지원되지 않습니다. | ReadLOB 작업은 BizTalk Server 지원되지 않습니다. | ReadLOB 작업은 BizTalk Server 지원되지 않습니다. 대신 선택 작업 또는 SQLEXECUTE 작업을 사용합니다. |
테이블 업데이트LOB 작업 | 지원됨 | 지원됨 | WCF-Custom 어댑터는 BodyWriter 를 사용하여 요청 메시지를 만들므로 LOB 데이터 형식에 대한 엔드 투 엔드 노드 값 스트리밍이 지원됩니다. |
SQLEXECUTE 작업 | 지원됨 | 지원됨 | WCF-Custom 어댑터는 XmlDictionaryWriter 를 사용하여 응답 메시지를 사용하므로 응답 메시지의 LOB 데이터 형식에 대한 엔드 투 엔드 노드 값 스트리밍이 지원됩니다. 어댑터가 Oracle 데이터베이스에서 작업을 호출하기 전에 모든 피연산자를 버퍼링해야 하므로 엔드 투 엔드 노드 값 스트리밍은 요청 메시지에 지원되지 않습니다. |
저장 프로시저 및 함수 작업 | 지원됨 | 지원됨 | WCF-Custom 어댑터는 XmlDictionaryWriter 를 사용하여 응답 메시지를 사용하므로 응답 메시지의 LOB 데이터 형식에 대한 엔드 투 엔드 노드 값 스트리밍이 지원됩니다. 즉, 응답 메시지의 OUT 및 IN OUT 프로시저 및 함수 매개 변수에 대해 스트리밍이 지원됩니다. 어댑터가 Oracle 데이터베이스에서 작업을 호출하기 전에 모든 피연산자를 버퍼링해야 하므로 엔드 투 엔드 노드 값 스트리밍은 요청 메시지에 지원되지 않습니다. |
POLLINGSTMT 작업 | 지원됨 | 지원됨 | WCF-Custom 어댑터는 XmlDictionaryWriter 를 사용하여 (인바운드) 요청 메시지를 사용하므로 LOB 데이터 형식에 대한 엔드 투 엔드 노드 값 스트리밍이 지원됩니다. |