2011-12-16 64 views
7

He intentado todas las combinaciones para enviar una solicitud para enviar una solicitud POST a WCT RESTful de jQuery.Solicitud de envío de envío a RESTful WCF con json

¿Alguien puede imitar y hacerlo funcionar? El código está aquí: http://pastebin.com/Ua97919C

Estoy trabajando con WCF en los últimos 2 años, pero cada vez que envío una solicitud POST me cuesta mucho trabajo.

Estoy luchando para que funcione desde los últimos 4 días y haya pasado por al menos 35-40 publicaciones.

Eventualmente, esta solicitud se enviaría desde iPhone a WCF.

Cuando lo compruebo con Fiddler el error es principalmente: * El servidor encontró un error al procesar la solicitud. El mensaje de excepción es 'El mensaje entrante tiene un formato de mensaje inesperado' Sin procesar '. Los formatos de mensaje esperados para la operación son 'Xml', 'Json'. Esto puede deberse a que un WebContentTypeMapper no se ha configurado en el enlace. Consulte la documentación de WebContentTypeMapper para obtener más detalles. '. Vea los registros del servidor para más detalles. El seguimiento de la pila excepción es: en

System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 

Respuesta

4

añadir un archivo Global.ascx en youe solución y reemplace el código con el siguiente

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
    { 
     HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
     HttpContext.Current.Response.End(); 
    } 
} 

una cosa más chnage dataType:'text'

$.ajax({ 
    type: "POST", 
    url: "http://localhost:4638/Edulink.svc/SaveUserData",       
    dataType: "text", 
    contentType: "application/json", 
    data:'{"EmailID":"praveen", "LevelID": 1}',   
    success:function(data, status) {    
     console.log(data); //gives 1     
    }, 
    error:function(request, status, error) { 
     alert("o0ops");   
    } 
}); 
+0

No ... Se produce un error en jQuery.min.js a continuación. Lo había intentado antes también. – iMatoria

+0

He intentado/reintentado ambos. – iMatoria

+0

¿Puede crear un proyecto de muestra y probarlo usted mismo? – iMatoria

2

El problema es el estilo del cuerpo de la operación. Usted lo declaró como

[WebInvoke(
     Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     RequestFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.WrappedRequest, 
     UriTemplate = "/SaveUserData")] 
string SaveUserData(UserInfo userInfo); 

lo que significa que la solicitud debe ser envuelto en un objeto, con un miembro por el nombre del objeto. Si envía esta solicitud a continuación, debería funcionar.

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: url, 
    data: '{"userInfo":{"EmailID":"praveen", "LevelID": 1}}', 
    dataType: "json", 
    processData: false, 
    success: function (data, textStatus, jqXHR) { 
     debugger; 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     debugger; 
    } 
}); 

Otra alternativa es cambiar la propiedad BodyStyle de la operación a Bare, en cuyo caso su solicitud original era correcta.

+0

No, no funciona de ninguna manera. Puede descargar la muestra y hacer que funcione: http://www.filefactory.com/file/c0dd2ac/n/WCFPost.zip – iMatoria

+0

Puede ver la muestra que tengo en pastebin que es similar a su escenario, y hacer la suya trabajo. Archivo SVC: SVC: http://pastebin.com/aG7FNDb0. Archivo SVC.cs: SVC.CS: http://pastebin.com/vhqeBSV3. Archivo HTML: http://pastebin.com/fDiYzR3Q. Web.config: http://pastebin.com/j4yw1axb – carlosfigueira

+0

Gracias por los esfuerzos. Pero, todavía no funciona. Tengo cada pieza de código como usted indicó. – iMatoria

Cuestiones relacionadas