El servidor HTTP de C# está analizando el cuerpo de la solicitud POST como nulo.
Tengo mi interfaz ServiceContract
La interfaz IService:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = “POST”,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
UriTemplate = “print”)]
[return: MessageParameter(Name = “Data”)]
int Print(PrintOrder orden);
}
El servicio:
public class Service : IService
{
public int Print(PrintOrder orden)
{
try
{
Console.WriteLine(“received order”,orden.Body,orden.PrinterName);
return 0;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message,ex.StackTrace);
return 1;
}
}
}
Y el DataContract:
[DataContract]
public class PrintOrder
{
[DataMember]
public string PrinterName{ get; set; }
[DataMember]
public string Body { get; set; }
}
El problema es que mi método de servicio Print siempre recibe un PrintOrder nulo como parámetro cada vez que envío una solicitud POST con cuerpo JSON:
{
“PrinterName”:”EPSON 1200″,
“Body”:”test body”
}
davy.ai
Para solucionar el problema del parámetro
PrintOrder
siempre siendo nulo en el métodoPrint
de la claseService
, debe asegurarse de que el cuerpo de la solicitud se esté deserializando correctamente en un objeto de tipoPrintOrder
.Una posible causa de que el parámetro sea nulo podría ser que las propiedades del objeto JSON no se estén mapeando correctamente a las propiedades del objeto
PrintOrder
. Asegúrese de que los nombres y tipos correspondan exactamente.Otra posible causa podría ser que el cuerpo de la solicitud JSON se esté enviando con el tipo de contenido incorrecto. Asegúrese de que la cabecera
Content-Type
de la solicitud POST esté establecida enapplication/json
.También puede intentar habilitar el seguimiento en su servicio WCF para ver si hay algún error o advertencia relacionado con el proceso de deserialización. Esto puede darle más información sobre el problema.
Una forma de probar la serialización/deserialización del objeto JSON es crear manualmente un objeto
PrintOrder
, serializarlo a JSON y luego deserializarlo en un nuevo objeto. Verifique que las propiedades se mapeen correctamente y que el objeto deserializado no sea nulo.En general, la depuración de servicios WCF puede ser compleja, pero siguiendo estos pasos y utilizando diversas herramientas y técnicas, debería poder identificar y solucionar el problema.