WCF webHttpBinding error con los parámetros del método. "Como máximo, un parámetro de cuerpo se puede serializar sin elementos de envoltura"

Operation '' of contract '' especifica múltiples parámetros del cuerpo de la solicitud para ser serializados sin ningún elemento contenedor. Como máximo, un parámetro del cuerpo se puede serializar sin elementos de contenedor. Elimine los parámetros de cuerpo adicionales o establezca la propiedad BodyStyle en WebGetAttribute / WebInvokeAttribute en Wrapped.

Estoy tratando de exponer un servicio WCF C # 4.0 con JSON a través de la siguiente configuración (establecida a través del editor de configuración WCF):

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="iPhoneAPI.API">
        <endpoint address="" behaviorConfiguration="NewBehavior0" binding="webHttpBinding"
          bindingConfiguration="" contract="iPhoneAPI.IApi" />
      </service>
    </services>
    <protocolMapping>
      <add scheme="http" binding="webHttpBinding" bindingConfiguration="" />
    </protocolMapping>
    <behaviors>
      <endpointBehaviors>
        <behavior name="NewBehavior0">
          <webHttp defaultOutgoingResponseFormat="Json" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>  
</configuration>

Cuando accedo a /API.svc, recibo el mensaje de excepción mencionado anteriormente.

Si solo especifico el siguiente contrato (sin parámetros), el servicio funciona:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "test")]
GenericApiResult<IEnumerable<LiveFeedEntity>> test();

Si tengo métodos que requieren parámetros que no son cadenas, obtengo la excepción mencionada anteriormente.

Ejemplo

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "login")]
LoginApiResult Login(String UserName, String Password);

Si cambio esta función así:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "login/{UserName}/{Password}")]
LoginApiResult Login(String UserName, String Password);

Funciona; pero esto solo es posible para los parámetros de Type String. ¿Cómo resuelvo esto para mis otras funciones como:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "logout")]
GenericApiResult<bool> Logout(Guid SessionKey);

Intenté muchas búsquedas en Google, pero apareció con las manos vacías, cualquier ayuda es apreciada.

Aclamaciones

Mella

Respuestas a la pregunta(3)

Su respuesta a la pregunta