<webMessageEncoding>

Enables plain-text XML, JavaScript Object Notation (JSON) message encodings and "raw" binary content to be read and written when used in a Windows Communication Foundation (WCF) binding.

<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding>
          <webMessageEncoding>

Syntax

<webMessageEncoding maxReadPoolSize="Integer"
                    maxWritePoolSize="Integer"
                    writeEncoding="UnicodeFffeTextEncoding/Utf16TextEncoding/Utf8TextEncoding" />

Attributes and Elements

The following sections describe attributes, child elements, and parent elements.

Attributes

Attribute Description
maxReadPoolSize The amount of messages that can be read simultaneously without allocating new readers. Larger pool sizes make the system more tolerant to activity spikes at the cost of a larger working set. The default is 64 readers for each of the inner encoders (text, JSON, and "raw").

Increasing this number increases memory consumption, but prepares the encoder to deal with sudden bursts of incoming messages because it is able to use readers from the pool that are already created instead of creating new ones.
maxWritePoolSize The amount of messages that can be sent simultaneously without allocating new writers. Larger pool sizes make the system more tolerant to activity spikes at the cost of a larger working set. The default is 16 writers for each of the inner encoders (text, JSON, and "raw").

Increasing this number increases memory consumption, but prepares the encoder to deal with sudden bursts of outgoing messages because it is able to use writers from the pool that are already created instead of creating new ones.
writeEncoding Specifies the character set encoding to be used for emitting messages on the binding. Valid values are:

- UnicodeFffeTextEncoding: Unicode Big Endian encoding.
- Utf16TextEncoding: Unicode encoding.
- Utf8TextEncoding: 8-bit encoding.

The default is Utf8TextEncoding. This attribute is of type Encoding.

Child Elements

Element Description
<readerQuotas> Defines the constraints on the complexity of SOAP messages that can be processed by endpoints configured with this binding. This element is of type XmlDictionaryReaderQuotasElement.

Parent Elements

Element Description
<binding> Defines all binding capabilities of the custom binding.

Remarks

Encoding is the process of transforming a message into a sequence of bytes. Decoding is the reverse process. These processes require the specification of a character encoding.

The webMessageEncoding element works by delegating to a series of inner encoders to handle the plain-text XML and JSON encodings, and "raw" binary data. This delegation is done by a composite message encoder.

This binding element and its composite encoder are used to control the encoding in scenarios that do not use SOAP messaging used by the webHttpBinding element. These scenarios include "Plain Old XML" (POX), Representational State Transfer (REST), Really Simple Syndication (RSS) and Atom syndication, and Asynchronous JavaScript and XML (AJAX). The composite message encoder does not support SOAP or WS-Addressing.

The binding element can be configured with a write character encoding by using the writeEncoding attribute. The supplied Encoding value specifies the behavior on write for the JSON and Textual XML cases. On read, any valid message encoding and text encoding is understood.

maxReadPoolSize and maxWritePoolSize can also be used to set the maximum number of readers and writers to be allocated respectively. By default 64 readers and 16 writers are allocated.

Default complexity constraints are also set using the <readerQuotas> element to protect against a class of denial of service (DOS) attacks that attempt to use message complexity to tie up endpoint processing resources.

Example

<webMessageEncoding maxReadPoolSize="256"
                    maxWritePoolSize="128"
                    messageVersion="None"
                    textEncoding="utf-8" />

See also