es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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”
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema del parámetro PrintOrder siempre siendo nulo en el método Print de la clase Service, debe asegurarse de que el cuerpo de la solicitud se esté deserializando correctamente en un objeto de tipo PrintOrder.

    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 en application/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.

Comments are closed.