Problema al llamar a la biblioteca de servicios WCF desde jQuery

Tengo una biblioteca de servicios WCF expuesta a través de mi sitio ASPX de la siguiente manera

[System.ServiceModel.OperationContract]
[System.ServiceModel.Web.WebInvoke(
Method= "POST",
RequestFormat=System.ServiceModel.Web. WebMessageFormat .Json,
ResponseFormat=System.ServiceModel.Web.WebMessageFormat .Json)]
LogonResponse Logon(LogonRequest logonRequest);


[System.Runtime.Serialization.DataContract]
[ Serializable()]
public class LogonRequest
{
[System.Runtime.Serialization.DataMember]
public string EMailAddress;
[System.Runtime.Serialization.DataMember]
public string Password;
}

En mi página de prueba puedo llamar a través de MS Ajax:

<asp:ScriptManager ID ="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/testService.svc" />
</Services>
</asp:ScriptManager>
.
.
.
function clsLogonRequest(eMailAddress, password) {
this .EMailAddress = eMailAddress;
this .Password = password;
}

function login(eMailAddress, password) {
var LogonRequest = new clsLogonRequest(eMailAddress, password);
name.API.IAPI.Logon(LogonRequest, onSuccess, onFailure);
}

function onSuccess(result) {
$( "#txtSessionId").val(result.SessionId);
$( "#txtUserName").val(result.Name);
$( "#txtUserId").val(result.UserId);
}

que funciona bien, oa través de una llamada jQuery $ .ajax: -

$(document).ready(function() {
$( "#Button1").click(function() {
var LogonRequest = new clsLogonRequest( '*************' , '***********');
$.ajax({
type: "POST",
url: "testService.svc/Logon",
data: "{'logonRequest':" + JSON.stringify(LogonRequest) + "}" ,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
});
});

Lo que no es así: en FireBug puedo ver el mensaje de error del servidor interno 500 y se inicia la excepción

{"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":"The token '\"' was expected but found '''.","StackTrace":"   at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)\u000d\u000a   at System.Xml.XmlExceptionHelper .ThrowTokenExpected(XmlDictionaryReader reader, String expected, Char found)\u000d\u000a   at System.Runtime...

¿Por qué parece que la llamada jQuery está pasando XML cuando le digo específicamente que no lo haga (y cómo puedo detenerlo para que las llamadas de todas las fuentes se manejen de la forma más natural posible)?

Gracias por adelantado.

EDITAR:

Gracias por las sugerencias, he mirado lo que dijo y creo que mi explicación del problema no fue lo suficientemente clara.

El problema no es que no se esté enviando JSON, se está enviando y está en el formato correcto, puedo verlo desde firebug. El problema es que la biblioteca de servicios de WCF parece estar esperando XML y se cae cuando recibe JSON.

Para asegurarse de que no haya pasado por alto la solución sugerida, aquí está el extracto de configuración de la web. He intentado eliminar el comportamiento y eliminar el atributo de configuración de comportamiento de la etiqueta services / end / endpoint y eso solo hace que todo falle. Sin salir de la página.

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name ="MyServiceTypeBehaviors ">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name ="AspNetAjaxBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled= "true " />
<services>
<service name ="test.API.API" behaviorConfiguration = " MyServiceTypeBehaviors">
<endpoint behaviorConfiguration="AspNetAjaxBehavior" binding = " webHttpBinding" contract="test.API.IAPI" />
<endpoint contract ="IMetadataExchange" binding= " mexHttpBinding" address="mex" />
</service>
</services>
</system.serviceModel>

Gracias por adelantado

Respuestas a la pregunta(1)

Su respuesta a la pregunta