WCF, Streaming, Mensaje Error de contrato: error al deserializar el cuerpo del mensaje de solicitud

He desarrollado un método complicado de servicio WCF. Me gustaría usar el modo de transferencia Streaming, y debido a que tengo más de un parámetro, he definido un MessageContract con un cuerpo y un encabezado.

[MessageContract]
public class ReportAudioMessage
{
    [MessageHeader]
    public int ReportId;

    [MessageHeader]
    public string FileName;

    [MessageHeader]
    public int FileLengthInBytes;

    [MessageHeader]
    public int LengthInSeconds;

    [MessageBodyMember]
    public Stream ReportAudio;
}

Observe que la transmisión es el único miembro del cuerpo, según las pautas que leí en MSDN.

El método se define como tal:

    [OperationContract]
    void SaveReportAudio(ReportAudioMessage reportToSave);

Cuando intento invocar el método (usando la reflexión), aparece un error:

Error al deserializar el cuerpo del mensaje de solicitud para la operación 'SaveReportAudio'. OperationFormatter encontró un cuerpo de mensaje no válido. Se esperaba encontrar el tipo de nodo 'Elemento' con el nombre 'SaveReportAudio' y el espacio de nombres 'http://tempuri.org/'. Nodo encontrado tipo 'Elemento' con nombre 'ReportAudioMessage' y espacio de nombres 'http://tempuri.org/'

SaveReportAudio es el nombre del método de servicio al que estoy llamando. ReportAudioMessage es el nombre del MessageContract que se define. Claramente, mi mensaje de jabón se está elevando, pero no sé cómo ... :(

El siguiente es el nodo Modelo de servicio, de la configuración web del Servicio:

<system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
    <bindings>
        <netTcpBinding>
            <binding
             name="VRManagerTcpBinding"
             closeTimeout="00:01:00"
             openTimeout="00:01:00"
             sendTi,meout="00:01:00"
             receiveTimeout="00:01:00"
             transferMode="Streamed">
                <reliableSession enabled="false"/>
                <security mode="None" />
            </binding>
        </netTcpBinding>
    </bindings>
    <services>
        <service name="Radia.VoiceRecognition.Services.VRManager" behaviorConfiguration="VRManagerTcpBehavior">
            <host>
                <baseAddresses>
                    <add baseAddress="net.tcp://localhost:8011/VRManager"/>
                </baseAddresses>
            </host>
            <endpoint
             address="VRManager.svc"
             binding="netTcpBinding"
             bindingConfiguration="VRManagerTcpBinding"
             contract="Radia.VoiceRecognition.Services.IVRManager" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
        </service>
    </services>
    <behaviors>
       <serviceBehaviors>
        <behavior name="VRManagerTcpBehavior">
         <serviceMetadata httpGetEnabled="false" />
         <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior> 
       </serviceBehaviors>
      </behaviors>
</system.serviceModel>

Y aquí está el nodo Modelo de servicio de la aplicación del cliente.

<system.serviceModel>
<bindings>
  <netTcpBinding>
    <binding name="NetTcpBinding_IVRManager" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions"
      hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
      maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
        enabled="false" />
      <security mode="None">
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
        <message clientCredentialType="Windows" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>
<client>
  <endpoint address="net.tcp://xxxxxxxxxxx:8012/VRManager.svc/VRManager.svc"
    binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IVRManager"
    contract="VRManager.IVRManager" name="NetTcpBinding_IVRManager" />
</client>

Respuestas a la pregunta(1)

Su respuesta a la pregunta