the servicemodel servicehostingenvironment serviceactivations provided not metadatos habilitar found could attribute .net jquery wcf json post

.net - servicemodel - WCF, POSTING JSONized datos



habilitar metadatos wcf (3)

Entonces, el problema que está experimentando es un error de serialización. WCF quiere ver el nombre de las propiedades en el JSON envuelto con ""

Así que me encontré con el mismo error donde

data:''{id: 1 }'',

no funcionó pero

data:''{"id": 1 }'',

funcionó

Espero que esto ayude a alguien más a salir

Tengo un tipo complejo:

[DataContract] public class CustomClass { [DataMember] public string Foo { get; set; } [DataMember] public int Bar { get; set; } }

Luego tengo un servicio web RESTful de WCF que tiene esto:

[OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/class/save")] bool Save(CustomClass custom);

así que en el lado del navegador jasonize mi objeto CustomClass para que se vea así:

var myClass = "{ foo: /"hello/", bar: 2 }"; $.ajax({ contentType: "application/json", data: { custom: myClass }, dataType: "json", success: callback, type: "POST", url: "MyService.svc/class/save" });

Presento los datos con jquery usando $ .ajax para poder establecer manualmente el tipo de contenido en "application / json" y cuando se envía, el postcuerpo se ve como

custom=<uri encoded version of myClass>

Obtuve el siguiente error:

El servidor encontró un error al procesar la solicitud. El mensaje de excepción es ''Hubo un elemento de inicio de comprobación de error del objeto de tipo MyAssembly.CustomClass. Encontrado el carácter inesperado ''c''. ''. Vea los registros del servidor para más detalles. El seguimiento de la pila de excepción es: en System.Runtime.Serialization.XmlObjectSerializer.IsStartObjectHandleExceptions (lector de XmlReaderDelegator) en System.Runtime.Serialization.Json.DataContractJsonSerializer.IsStartObject (lector de XmlDictionaryReader) en System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ReadObject (mensaje de mensaje) en System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest (Message message, Object [] parameters) en System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest (Message message, Object [] parameters) en System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest (Message message, Object [] parameters) en System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest (Message message, Object [] parameters) en System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs (MessageRpc & rpc) en System.ServiceModel.Dispatcher.DispatchOperationRuntime.Invok eBegin (MessageRpc & rpc) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & rpc) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & rpc) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & rpc) en System. ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & rpc) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & rpc) en System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet)

He intentado envolver mis datos jsonizados ... he intentado usar $ .post para enviar el mensaje (pero eso no establece el tipo de contenido en application / json para que el servicio web no comprenda) ... ¿alguna idea?


El problema del que ha escapado se ha creado correctamente, pero cuando está creando un objeto Json complejo en el método de publicación de jQuery, no está escapando el contenedor. Entonces, necesitas escapar de un objeto JS completo como este: "{/" custom / ": /" {foo: / "hello /", bar: 2} / "}" (en realidad, no lo intenté yo mismo, pero debería funcionar), o (probablemente una mejor solución) use JSON.stringify ({custom: myClass})

WCF es realmente sensible a los objetos JSON que recibe para la serialización.