1.3 Overview

The .NET Message Framing Protocol defines a format for framing messages, including SOAP messages. Consider a scenario in which two SOAP nodes are interacting and exchanging SOAP messages. The transport used for communication might not inherently support the notion of messages. For example, if the underlying transport is TCP, it provides a byte stream, and the receiver needs to have additional parsing logic to be able to extract a SOAP message from this stream.

This protocol intends to meet the following requirements:

  • Supports extensibility for different message-encoding formats.

  • Provides delimiters for a message.

  • Has capability to skip past a message that is not well formed. If the message frames are well formed but the embedded content is malformed, the protocol provides a means of skipping over all such message frames.

  • Supports extensible upgrades of the underlying transport stream.

The basic idea is to first notify the recipient of the message properties (metadata), including what version of the framing protocol is being used, who the message is meant for, and what encoding algorithm is used to encode the message content; and then to send a number of message frames that conform to those properties. The recipient, based on the message properties, is able to extract the messages from the transport stream and deliver them to the appropriate endpoint.

The message properties are typically controlled by the Protocol Configuration Object (PCO). The PCO determines the following aspects of a specified instance of the protocol:

  • The transport to be used.

  • The version of the .NET Message Framing Protocol being used.

  • The mode of communication, which is explained in sections 1.3.2 and 2.2.3.2.

  • The Via, which is a Uniform Resource Identifier (URI) that identifies the endpoint for which the messages are intended.

  • The encoding format being used for the messages. The different encoding schemes are covered in section 2.2.3.4.

  • The chunk size. If the mode supports chunking, this determines the maximum size of a chunk.

  • The implementation-defined maximum supported sizes for messages and record types. <1>