Streaming and the SAP Adapter

The Microsoft BizTalk Adapter 3.0 for mySAP Business Suite supports message streaming between itself and a client application. With the SAP adapter operations are invoked and responses are returned by exchanging SOAP messages. A SOAP message body is composed of XML nodes.

There are two kinds of message streaming that are supported by the adapter:

  • Node streaming. In node streaming, a message can be streamed a node at a time between the client and the adapter. This means that, the entire value of a node is read into a buffer and then sent on to the receiver.

  • Node-value streaming. In node-value streaming the actual value of the node can be streamed in chunks between the client and the adapter. Node-value streaming is useful for sending or receiving large IDOCs using the SendIdoc or the ReceiveIdoc operations. This is because the entire IDOC is contained in a single node. (As opposed to a strongly-typed Send or Receive operation in which the IDOC data is broken into many nodes).

Cc185513.Important(en-US,BTS.10).gifImportant
Node-value streaming is only supported between the adapter and a client application. The SAP adapter does not support end-to-end node-value streaming with the SAP system. This is because this functionality is not supported by the SAP client library.

Both of these streaming modes rely on support for node streaming and node-value streaming on messages in WCF. For this reason, streaming is tied closely to how messages are created and consumed both by the adapter and by a client application. One result of this is that support for message streaming is not the same across all programming models.

The sections in this topic provide:

  • Fundamental background information about how message streaming is supported in WCF and how it is implemented by the adapter.

  • Information about how message streaming is supported when you use the adapter in each programming model.

The support for streaming implemented by the SAP adapter is a combination of:

  • Message streaming support in WCF.

  • Streaming support in the SAP client library.

  • The way messages are created and consumed internally by the adapter.

Message Streaming Support in WCF

How WCF supports streaming on a message depends both on how the message is created and how the message is consumed.

  • A WCF message is created by using the static Create method of System.ServiceModel.Channels.Message. This method has several overloads that support different ways of passing the message body. A WCF message can be created by passing the message body using:

    • A System.Xml.XmlReader, or

    • A System.ServiceModel.Channels.BodyWriter.

  • A WCF message can be consumed using

    • An XmlReader by calling Message.GetReaderAtBodyContents(), or

    • An XmlDictionaryWriter by calling Message.WriteBodyContents(XmlDictionaryWriter).

The following table shows how WCF behaves for different combinations of creating and consuming messages.

Message Created With Message Consumed With WCF Behavior

XmlBodyWriter

XmlDictionaryWriter

Node-value streaming is supported. WCF pipes the two writers together to enable streaming. Both the XmlBodyWriter and the XmlDictionaryWriter must support node-value streaming for it to occur.

XmlBodyWriter

XmlReader

Node streaming is supported. WCF internally buffers the XmlReader.

XmlReader

XmlDictionaryWriter

Node streaming is supported. WCF internally buffers the XmlReader and calls back into the XmlDictionaryWriter.

XmlReader

XmlReader

Node streaming is supported. WCF internally buffers the XmlReader.

Streaming Support in the SAP Client Library

The SAP client library does not support streaming. Therefore end-to-end node-value streaming is not supported by the SAP adapter.

Internal Message Handling by the Adapter

The adapter supports streaming in the following manner:

  • The adapter consumes the SendIdDoc request message received from the client by using a custom implementation of XmlDictionaryWriter. It consumes all other messages received from the client using an XmlReader.

  • The adapter creates the ReceiveIdoc request message that it sends to the client by using a custom implementation of XmlBodyWriter. It creates all other messages that it sends to the client using an XmlReader.

The following table provides detailed information about how streaming is supported in the WCF channel model.

Operation  Node Streaming Node-Value Streaming Description

Outbound RFC and BAPI operations (from the client to the adapter)

Not supported

Not supported

Outbound tRFC operations (from the client to the adapter)

Not supported

Not supported

IDOC Send operation (strongly typed)

Not supported

Not supported

IDOC Receive operation (strongly typed)

Supported

Not supported

SendIdoc operation (string)

Supported

Supported

The adapter uses an XmlDictionaryWriter to consume the request message. If the client creates the message with a BodyWriter, node-value streaming from the client to the adapter occurs.

ReceiveIdoc operation (string)

Supported

Supported

The adapter uses a BodyWriter to create the request message. If the client consumes the message using an XmlDictionaryWriter, node-value streaming from the adapter to the client occurs.

Inbound RFC operations

Not supported

Not supported

Inbound tRFC operations

Not supported

Not supported

For information about how to implement node-value streaming in your code to send and receive flat file (string) IDOCs using the SendIdoc and ReceiveIdoc operations, see Streaming Flat-File IDOCs in the WCF Channel Model.

Serializing and deserializing between the XML representation of a message and the managed code object representation of that message requires writing and reading the entire message into memory. For this reason, neither node streaming nor node-value streaming is supported from the WCF service model.

The following table provides detailed information about how streaming is supported in BizTalk Server.

Operation  Node Streaming Node-Value Streaming Description

RFC and BAPI operations (from the client to the adapter)

Not supported

Not supported

tRFC operations (from the client to the adapter)

Not supported

Not supported

IDOC Send operation (strongly typed)

Not supported

Not supported

IDOC Receive operation (strongly typed)

Supported

Not supported

SendIdoc operation (string)

Supported

Supported

The WCF-Custom adapter uses a BodyWriter to create the request message, so node-value streaming is supported.

ReceiveIdoc operation (string)

Supported

Supported

The WCF-Custom adapter uses an XmlDictionaryWriter to consume the request message, so node-value streaming is supported.

Inbound RFC operations

Not supported

Not supported

Inbound tRFC operations

Not supported

Not supported

Other Resources

Development

Show: